關於List,ArrayList中remove(object obj)方法不能刪除物件問題
阿新 • • 發佈:2019-01-05
先看下面程式碼,大家猜猜列印的結果是什麼?為什麼?
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