-1

ArrayListのremove()メソッドに質問があります。正しく使っていれば作りたいです。だから私はオブジェクトのArrayListを持っていて、Arraylistから特定のオブジェクトを削除したいと思います。bool remove(obj)は使用する正しいメソッドですか?私が理解しているように、removeメソッドはequalsメソッドに基づいてオブジェクトを比較します。オブジェクトがユーザー定義のクラスであり、equalsメソッドがオーバーライドされていない場合、コンテンツではなくアドレスを比較している==を使用してオブジェクトを比較する必要がありますか?この場合、コンテンツではなくアドレスを比較することが適切であるため、removeメソッドはArrayListから特定のオブジェクトを削除する正しい方法です。

私の理解は正しいですか?

4

2 に答える 2

4

オブジェクトがわかっている場合は、これを使用するのが正しい方法です。反復時には使用できません。. を取得しConcurrentModificationExceptionます。
反復時に要素を削除する場合は、使用する必要がありますIterator

final Iterator<Something> listIter = arrayList.iterator();
while(listIter.hasNext()) {
  final Something thing = listIter.next();
  if(someTest) {
    listIter.remove();
  }
}
于 2013-02-17T20:39:12.807 に答える
3

私が理解しているように、 remove メソッドは equals メソッドに基づいてオブジェクトを比較します。オブジェクトがユーザー定義クラスであり、equals メソッドがオーバーライドされていない場合、コンテンツではなくアドレスを比較する == を使用してオブジェクトを比較する必要がありますか?

オーバーライドしないequals()と、クラスのデフォルトの equals が使用されますObject

参照を比較する

 public boolean equals(Object obj) {
   return (this == obj);
 }

クラスがオブジェクトの直接のサブクラスでない場合、オーバーライドされたものを使用しますequals()

例えば:

Object
|
|--Animal (overrides `equals()`)
    |
    |
  Human (Doesn't override `equals()`, it will use `Animal`'s version of `equals()` not `Object`'s
于 2013-02-17T20:36:29.177 に答える