2013-02-17 53 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