JavaのArrayListから要素/オブジェクトを削除する2つの方法

javaのArrayListからオブジェクトを削除するには、最初にremove()メソッドを使用し、次にIteratorを使用し ArrayListは、オーバーロードされたremove()メソッド、削除されるオブジェクトの1つのacceptインデックス、つまりremove(int index)、および削除される他のacceptオブジェクト、つまりremove(Object obj) 経験則は、オブジェクトのインデックスがわかっている場合は最初のメソッドを使用し、そうでない場合は2番目のメソッドを使用することです。 ちなみに、反復している場合はArrayListを反復処理していない場合にのみ、ArrayList removeメソッドを使用することを覚えておく必要があります。Iteratorを使用します。remove()メソッドが失敗すると、JavaでC O N C U R Rentmodificationexceptionが発生する可能性があります。 自動ボックス化のために別の問題が発生した可能性があります。 整数のArrayListから削除しようとしている場合、2つのremoveメソッドremove(int index)とremove(Object obj)は区別できません。
ArrayListに3つのオブジェクトがあり、2番目のオブジェクトを削除したいとします。 自動ボックス化を検討している場合は、実際にはremove(Object)の呼び出しであるremove(2)を呼び出すことができますが、remove(index)として解釈することにより、3番目の要素
この問題については、以前の記事で、Javaでメソッドをオーバーロードする際に従うべきベストプラクティスについて説明しました。 あまり知られていない拡幅ルールと自動ボックス化のために、過負荷のメソッドが不十分であると、多くのあいまいさが生じます。

ArrayListから要素を削除するコード例

整数を持つArrayListの簡単なコード例で上記の理論をテストしましょう。 次のプログラムは、1、2、および3を含む整数のArrayListを持っています。

パッケージテスト;インポートjava。ユーティルArrayList;javaをインポートします。ユーティル/****@Authorhttp://java67.blogspot.com*/public class JavaTutorial{/***@param argsコマンドライン引数*/public static void main(String args){List<Integer>numbers=new ArrayList<integer>numbers=new ArrayList<integer>numbers=new ArrayList<<整数>();数字。add(1);数字.add(2);数字。add(3);システム。出ろprintln("ArrayList contains:"+numbers);//remove(index)numbersを呼び出します。remove(1);//インデックス1のオブジェクト、すなわち2番目のオブジェクトを削除します。//remove(object)numbersを呼び出します。remove(3);}}出力:ArrayListには次のものが含まれています:スレッド"main"javaの例外。ラングIndexOutOfBoundsException:インデックス:3、サイズ:2javaで。ユーティルArrayList。rangeCheck(ArrayList.java:635)である。ユーティルArrayList。削除(ArrayList.java:474)でテストしてみました。テスト。メイン(テスト。java:33)Java Result:1

2番目の呼び出しもremove(index)として扱われることがわかります。 あいまいさを取り除く最善の方法は、以下に示すように、自動ボックス化を取り出して実際のオブジェクトを提供することです。

システム。出ろprintln("Arraylist Before:"+numbers);//remove(index)numbersを呼び出します。remove(1);//インデックス1のオブジェクト、すなわち2番目のオブジェクトを削除します。//remove(object)numbersを呼び出します。remove(New Integer(3));システム。出ろprintln("Arraylist After:"+numbers);Output:ArrayList Before:Arraylist After:

今回は動作しますが、私のような怠惰な開発者が怖いので、自動ボックス化が許可されています。 次に、それらを反復処理しながらArrayListからオブジェクトを削除することを見てみましょう。 先に進む前に、JavaのIteratorに精通している必要があります。

イテレータを使用してArrayListからオブジェクトを削除

2javaのArrayListから要素/オブジェクトを削除する例これは、実際にはjavaプログユーティルIteratorを使用している間、ArrayList。 それ自体が誤解を招くC O N C U R Rentmodificationexceptionが表示されたときにのみ、間違いを認識し、並行wordのためにそのArrayListを変更している別のスレッドを見つけるのに無数の時間を費や 例を見てみましょう。

public static void main(String args){List<Integer>numbers=new ArrayList<Integer>Integer>();数字。add(101);数字.add(200);数字。追加(301);数字.add(400);システム。出ろprintln("ArrayList Before:"+numbers); Iterator<Integer> itr = numbers.iterator(); // remove all even numbers while (itr.hasNext()) { Integer number = itr.next(); if (number % 2 == 0) { numbers.remove(number); } } System.out.println("ArrayList After : " + numbers); }Output :ArrayList Before : Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) at java.util.ArrayList$Itr.next(ArrayList.java:831) at Testing.main(Testing.java:ArrayListからremove()メソッドを呼び出すため、C O N C U R Rentmodificationexceptionできます。 これはこのような簡単な例では簡単ですが、実際のプロジェクトでは本当に難しい場合があります。 さて、この例外を修正するには、単に番号の呼び出しを置き換えます。()をitrに削除します。remove()を使用すると、以下に示すように、反復している現在のオブジェクトが削除されます。
System。出ろprintln("ArrayList Before:"+numbers);Iterator<Integer>itr=numbers.iterator();//すべての偶数を削除しますswhile(itr.hasNext()){整数番号=itr.次へ(); if(number%2==0){itr.remove();}}システム。出ろprintln("ArrayList After:"+numbers);OutputArrayList Before:ArrayList After:

これは、JavaのArrayListからオブジェクトを削除する方法についてのこの投稿のすべてです。 ArrayListからオブジェクトまたは要素を削除する2つの方法を学びました。 ちなみに、反復していない場合は常にremove(index)を使用してオブジェクトを削除し、そうでない場合は常にIteratorのremove()メソッドを使用してArrayListからオブジェク ちなみに、上記のヒントは、インデックスベースのリスト実装で動作します。
さらなる学習
Javaの詳細: 完全なJavaエンジニアになる
Javaの基礎:コレクション
データ構造とアルゴリズム:Javaを使用して深いダイブ
アルゴリズムとデータ構造-パート1と2
ハインツKabutzによるJava9のデータ構造

コメントを残す

メールアドレスが公開されることはありません。