List集合中remove方法的使用

2021-09-19 20:47:25 字數 2956 閱讀 8953

以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...