2013-02-17 31 views
-1

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

我的理解是否正确?

+4

你可以尝试找出;) – jlordo 2013-02-17 20:36:03

回答

4

如果您知道对象 - ,那么在迭代时不能使用它是正确的方法!。您将获得ConcurrentModificationException
如果你想删除的元素进行遍历时,您需要使用Iterator

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

据我所知,remove方法根据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 
+1

哪个比较基准地址... – 2013-02-17 20:36:46

+0

@布赖恩是的,这是真的 – 2013-02-17 20:38:49