以arraylist為例:
//泛型為引用資料型別:
arraylistlist=new arraylist();
list.add("tom");
list.add("jim");
list.remove("jim"); //呼叫刪除方法
system.out.println(list.size());
//刪除的時候呼叫arraylist中的remove方法,形參o為object資料型別的,傳入的o是string型別的,所以o為上轉型物件,o的值不為空,執行else中的**,o.equals(elementdata[index]是o呼叫equals方法,object類中的equals對於string型別來說是比較位址,傳入的是jim物件,陣列中有jim,所以刪除成功。
//arraylist中remove方法的底層**為
/* public boolean remove(object o)
} else
}return false; //遍歷完都沒有找到匹配的內容才會執行此語句。
} */
//object中的equals方法為
public boolean equals(object obj)
//object類中的equals對於string型別來說是比較內容是否相同,傳入的是jim物件,陣列中存在jim,所以會刪除成功。
泛型為基本資料型別(以int為例):
arraylistlist=new arraylist();
list.add(1);
list.add(2);
list.remove(1); //刪除,integer型別(基本資料型別對應的包裝類)比較數值是否相同。
system.out.println(list.size()); //集合中的元素是按順序排列的,remove(i)中的i指的是元素位置,執行刪除語句後,集合後邊的元素向前移。
泛型為person類時:
(1)
arraylistlist=new arraylist();//按順序排列
person person=new person();
list.add(person);
list.remove(person); //刪除,比較位址是否相同。同乙個物件位址相同,刪除的是同乙個人,會刪除成功。
system.out.println(list.size());
//此處呼叫remove方法後,執行呼叫equals方法的語句,如果在person類中重寫了equals方法,則呼叫的是子類重寫後的方法:
public boolean equals(object obj)
(2)arraylistlist=new arraylist();
list.add(new person());//新增乙個人
list.add(new person());//再新增乙個人
list.remove(new person());//刪除,引用資料型別比較位址是否相同,此處刪除的又是另乙個物件的位址,刪除不成功。
system.out.println(list.size());
//此處重寫equals方法後,呼叫的是子類重寫後的方法:
public boolean equals(object obj)
(3)arraylistlist=new arraylist();
list.add(new person("1"));
list.add(new person("2"));
person p=new person("1");
list.remove(p);
system.out.println(list.size());//刪除成功了,因為重寫父類的equals方法,返回值改為return this.id.equals(person.id); 特別注意;比較的是id。
//驗證:
system.out.println(list.get(0));//獲取第乙個j集合元素位址。
system.out.println(list.get(0).id);//獲取第乙個集合元素id;
//下邊為person類中重寫的equals方法:出現多型,此處有明顯重寫了返回值比較規則。
@override
public boolean equals(object obj)
(4)a, 泛型為object時:傳入的資料型別多種多樣。
b, id為int型別
c, 重寫後的方法是:
@override
public boolean equals(object obj)
arraylistlist=new arraylist();
list.add(new person(1));
list.add(new dog(1));//不出錯,第一行**執行equals時位址正確,直接return結束,第二行**不會執行。
person p=new person(1);
list.remove(p);
system.out.println(list.size());
list.add(new dog(1)); //出錯。是因為型別轉換錯誤,怎麼解決? 見(5)
list.add(new person(1));
person p=new person(1);
list.remove(p);
system.out.println(list.size());
(5)a, 泛型為object時:傳入的資料型別多種多樣。
b, id為int型別
c, 重寫後的方法是:
@override
public boolean equals(object obj)
return false;
} 改進重寫方法之後不會出錯了。因為首先判斷不通過。
Java中List的remove方法
今天被問到乙個問題 numberlist是乙個儲存數字的容器,以下 執行後容器中的數字是什麼?listnumberlist new arraylist 5 numberlist.add 2 numberlist.add 4 numberlist.add 1 numberlist.add 3 numb...
JAVA 使用List中的remove方法遇到的坑
一 問題描述 有個需求是從list過濾掉金額小於0.01的資料,看起來很簡單,我卻搞了半天,沒次資料都沒刪除乾淨,都會有四五條沒刪除。二 解決方法 測試了半天,發現for迴圈寫錯了,剛開始是這樣寫的 for int i 0 i psychologistresponselist.size i debu...
Java中List的remove方法解析
1 public e remove int index 方法,它的作用是 移除此列表中指定位置上的元素,向左移動所有後續元素 將其索引減 1 其返回值是從列表中移除的元素。演示 如下 arraylistlist new arraylist list.add 小明 list.add 小花 list.a...