Arraylist删除()

时间:2013-02-17 20:33:46

标签: java arraylist

我有问题ArrayList的remove()方法。如果我正确使用它,我想制作。所以我有一个对象的ArrayList,我想从Arraylist中删除一个特定的对象。 bool是否删除(obj)正确的方法?据我了解,remove方法基于equals方法比较对象。如果对象是用户定义的类并且不覆盖equals方法,那么它应该使用==比较对象来比较地址而不是内容?在这种情况下,比较地址而不是内容是合适的,因此remove方法是从ArrayList中删除特定对象的正确方法。

我的理解是否正确?

2 个答案:

答案 0 :(得分:4)

如果您知道对象,则使用正确的方法 - 在迭代时不能使用它。您将获得ConcurrentModificationException 如果要在迭代时删除元素,则需要使用Iterator

final Iterator<Something> listIter = arrayList.iterator();
while(listIter.hasNext()) {
  final Something thing = listIter.next();
  if(someTest) {
    listIter.remove();
  }
}

答案 1 :(得分: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