-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(),它将使用类中的默认等于Object

并且比较参考

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

如果您的类不是 Object 的直接子类,它将使用覆盖的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 回答