1. 程式人生 > >關於List,ArrayList中remove(object obj)方法不能刪除物件問題

關於List,ArrayList中remove(object obj)方法不能刪除物件問題

先看下面程式碼,大家猜猜列印的結果是什麼?為什麼?
packageshiyan;
 
importjava.util.ArrayList;
importjava.util.List;
 
publicclass ListTest {
 
    publicstatic void main(String[] args) {
        // TODO Auto-generated method stub
        List<A> list = newArrayList<A>();
        A a1 = newA(1,"a1");
        A a2 = newA(2,"a2");
        A a3 = newA(3,"a3");
        A a4 = newA(4,"a4");
        A a5 = newA(5,"a5");
         
        list.add(a1);
        list.add(a2);
        list.add(a3);
        list.add(a4);
        list.add(a5);
         
        list.remove(a2);
         
        System.out.println(list.size());
    }
 
}
 
classA{
    intid;
    String name;
    publicA(intid,String name){
        this.id = id;
        this.name = name;
    }
     
    publicboolean equals(Object obj) {
        returnfalse;
    }
     
}


如果您的回答是:4,我想您就有必要看看本文了,因為正確答案是5 先貼上:ArrayList上的remove原始碼:
public boolean remove(Object o) {
    if(o == null) {
            for(intindex = 0; index < size; index++)
        if(elementData[index] == null) {
            fastRemove(index);
            returntrue;
        }
    }else{
        for(intindex = 0; index < size; index++)
        if(o.equals(elementData[index])) {
            fastRemove(index);
            returntrue;
        }
        }
    returnfalse;
    }


看原始碼可知,List在刪除物件時,先判斷這個物件是否在自己的佇列中?而這種判斷指的是是否equals 因此,List在刪除物件時,如果使用刪除物件方法,應該最好重寫equals方法,否則最好使用刪除下標的方法。 本文只針對遇到問題來看的童鞋們,沒遇到問題這邊文章您會覺得沒太大意思,那就。。。 歡迎大家,加我qq交流:214044600