2011年12月7日水曜日
JavaのArrayListの削除時の注意点
AndroidやJavaではよくArrayListを頻繁に使用する。
特にAndroidではListViewにアタッチする時によく利用されるようだ。
そこで私がしでかした失敗談を一つ。
ArrayListの要素を削除する場合removeメソッドを使用する。
このremoveメソッドは要素を削除した場合
indexも変更になる事に気をつけなければならない。
例えば
ArrayList<String> arrayList = new ArrayList<String>[];
arrayList.add("AAA");
arrayList.add("BBB");
arrayList.add("CCC");
とした際にまとめて削除したい場合
for( int i = 0 ; i < arrayList.size() ; i++ ){
arrayList.remove(i);
}
とかするとエラーになってしまう。
なぜならsizeで取得した時点の要素数は3だが
removeを実行した瞬間にsizeが変わる。
index0番目(i=0)に相当するAAAを削除したらsizeはその時点で2になるのだ。
そしてindex1番(i=1)はBBBを指してはおらずCCCを指す事になる。
この時点でBBBは残りCCCは削除されるが
次のindex2番(i=2)はremoveをかけた瞬間にエラーとなる。
そう。要素が既に無いのだ。
3個消したい場合これではだめ。
全部消したいのなら
arrayList.clear()とするか
for( int i = 0 ; i < arrayList.size() ; i++ ){
arrayList.remove(0);
}
などとすればよいだろう。
だが例えば「1番目と3番目を削除したい」としたらどうだろう。
理論的にはindex0を削除したあとindex1を削除すればいいのだが・・・。
「減っていくなら最後の方から削除すればいいのに」という声が聞こえた。
for( int i = arrayList.size() - 1 ; i >= 0 ; i-- ){
if ( i == 0 ){
arrayList.remove(i);
}
if ( i == 2 ){
arrayList.remove(i);
}
}
こんな感じ?
登録:
コメントの投稿 (Atom)
Windows10 1803の再インストールした時のメモ
今日はちょっとしたメモを残そうと思って書き込みしています。 事の発端は大きいファイルを整理している最中にエラーが頻発した事から始まります。
-
今まで何度も何度も読み返してるのになぜスルーしてたのか分からない。
-
次にperl moduleをインストールしていきます。 私の環境で2時間程度かかりました。 一つ一つインストールして確認しながらやっていくのも いいのかもしれませんが私はscriptを組んで 実行後screenをデタッチして別作業を行っていました。 好みによると思います...
0 件のコメント:
コメントを投稿