ArayListを巡回し、いくつかの要素を削除する方法で実現しました.
2177 ワード
この文章は根拠です https://blog.csdn.net/qq_32575047/articale/detail/78902254 の招待状を整理しました.ここで感謝します.
タイトル:ArayListオブジェクトaListの中にいくつかの文字列要素が存在していますが、現在はArayListオブジェクトを巡回して、その中のすべての値が「abc」の文字列要素を削除したいです.コードで実現してください.
ローズマリーを使って巡回することもできます.
今はaListを修正して、データ「abc」を追加します. , 上の二つのコードをもう一度実行して、違いがありますか?
[a,ab,abc,abcr,abcf,abdc] 「abc」が除去されていないことが分かった.
しかし、ローズマリーを使って、答えは正しいです.すべての「abc」が取り除かれました.
このような状況が発生した原因は何ですか?
ArayListの底のデータ構造は配列であるため、配列の特性については、いずれかの要素が削除されると、その要素の後ろのすべての要素が前の位置に移動し、この特性を組み合わせて、先ほどのforサイクルに戻ると、なぜ「abc」が削除されたのかをよく説明することができる.
タイトル:ArayListオブジェクトaListの中にいくつかの文字列要素が存在していますが、現在はArayListオブジェクトを巡回して、その中のすべての値が「abc」の文字列要素を削除したいです.コードで実現してください.
public class Test1 {
public static void main(String[] args) {
ArrayList aList = new ArrayList();
aList.add("a");
aList.add("ab");
aList.add("abc");
aList.add("abcr");
aList.add("abc");
aList.add("abcf");
aList.add("abc");
aList.add("abdc");
for(int i = 0;i
出力結果は、[a,ab,abcr,abcf,abdc]ローズマリーを使って巡回することもできます.
Iterator iter = aList.iterator();
while(iter.hasNext()){
if(iter.next().equals("abc")){
iter.remove();
}
結果は上と同じです.今はaListを修正して、データ「abc」を追加します. , 上の二つのコードをもう一度実行して、違いがありますか?
ArrayList aList = new ArrayList();
aList.add("a");
aList.add("ab");
aList.add("abc");
aList.add("abc"); //
aList.add("abcr");
aList.add("abc");
aList.add("abcf");
aList.add("abc");
aList.add("abdc");
その後、forを循環して、結果は次のようになります.[a,ab,abc,abcr,abcf,abdc] 「abc」が除去されていないことが分かった.
しかし、ローズマリーを使って、答えは正しいです.すべての「abc」が取り除かれました.
このような状況が発生した原因は何ですか?
ArayListの底のデータ構造は配列であるため、配列の特性については、いずれかの要素が削除されると、その要素の後ろのすべての要素が前の位置に移動し、この特性を組み合わせて、先ほどのforサイクルに戻ると、なぜ「abc」が削除されたのかをよく説明することができる.
for(int i = 0;i
次のように改善できます.for(int i = 0;i
または、次のように改善されます.for(int i = aList.size() -1 ;i >= 0 ; i--){
if(aList.get(i).equals("abc")){
aList.remove(i);
}
}
このような問題がないのは、has Next()の方法のためです.原理は、ポインタが後ろに移動して、it.next()を実行するたびに、ポインタが後ろに移動して、一つ一つの遍歴があります.このような問題を避けるためには、できるだけサンデーを使ったほうがいいです.