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