Java中List的remove方法解析

2021-09-19 23:03:52 字數 3735 閱讀 4971

1、public e remove(int index) 方法,它的作用是:移除此列表中指定位置上的元素,向左移動所有後續元素(將其索引減 1)。其返回值是從列表中移除的元素。

演示**如下:

arraylistlist = new arraylist();

list.add("小明");

list.add("小花");

list.add("小強");

system.out.println(list.size());

system.out.println(list.get(0));

system.out.println(list.get(1));

system.out.println(list.get(2));

list.remove(1);

system.out.println(list.size());

system.out.println(list.get(0));

system.out.println(list.get(1));

輸出結果如下:

3

小明小花小強2

小明小強

2、public boolean remove(object o)方法,它的作用是:移除此列表中首次出現的指定元素(如果存在)。如果列表不包含此元素,則列表不做改動。其返回值為boolean型別(如果此列表包含指定的元素,則返回 true,否則返回false)。

演示**如下:

arraylistlist = new arraylist();

list.add("小明");

list.add("小花");

list.add("小強");

system.out.println(list.size());

system.out.println(list.get(0));

system.out.println(list.get(1));

system.out.println(list.get(2));

system.out.println(list.remove("小天"));//由於「小天不在列表中,故輸出結果為false」

list.remove("小花");//刪除「小花」元素

system.out.println(list.size());

system.out.println(list.get(0));

system.out.println(list.get(1));

輸出結果如下:

3

小明小花

小強false2小明

小強

1、讓我們先看看此方法的源**

public boolean remove(object o) 

} else

}return false;

}

2、分析arraylist物件呼叫remove方法的執行過程

①arraylist物件呼叫remove方法會傳入乙個引數,引數會進行上轉型。

②我們來看方法體內主要部分的**(else語句塊),此語句塊作用是:遍歷列表中的元素,如果找到與引數物件相同的元素,列表就移除對應元素,返回true。

③在上一步的遍歷過程中,「相同」代表的是什麼含義呢?如若要弄明白其含義,我們來看一下上圖for迴圈中的equals方法。

④物件o呼叫了equals方法和列表中元素比較,那麼這個equals方法呼叫的是哪個類中的equals方法那?

⑤對於上圖**而言,由於我們傳入的物件o為string型別的物件,所以呼叫的方法是string類中的重寫object類中對應方法的equals方法(比較內容是否相同),我們來看一下string類中的equals方法才能理解得更加清楚。

public boolean equals(object anobject) 

if (anobject instanceof string)

return true;}}

return false;

}

⑥所以上圖**的目的就是:通過remove方法移除列表中與傳入物件內容相同的元素,也就是移除列表中我們傳入的學生姓名。

⑦那如果我們傳入的物件o沒有重寫equals方法呢?還可以達到第⑥條所說的移除列表中與傳入物件內容相同的元素的目的嗎?

我們來看下面的**

public class person
arraylistlist = new arraylist();

list.add(new person("小明"));

list.add(new person("小花"));

list.add(new person("小強"));

system.out.println(list.size());

system.out.println(list.get(0));

system.out.println(list.get(1));

system.out.println(list.get(2));

system.out.println(list.remove(new person("小花")));

system.out.println(list.size());

system.out.println(list.get(0));

system.out.println(list.get(1));

system.out.println(list.get(2));

輸出結果如下:

3

date0426.person@7852e922

date0426.person@4e25154f

date0426.person@70dea4e

false

3date0426.person@7852e922

date0426.person@4e25154f

date0426.person@70dea4e

⑧通過輸出結果發現:我們並沒有達到刪除列表中「小花」元素的目的。原因是:remove方法的傳入的物件o沒有重寫equals方法,所以其比較的是位址。而我們傳入的物件o與新增的「小花」物件位址並不一樣,它們只是成員變數的名字一樣罷了。

⑨那我們怎麼實現第⑦條所說的目的呢?重寫object類中的equals方法。

我們來看如下**

public class person 

@override

public boolean equals(object obj)

}

重寫equals方法後輸出結果如下

3

date0426.person@7852e922

date0426.person@4e25154f

date0426.person@70dea4e

true

2date0426.person@7852e922

date0426.person@70dea4e

⑩所以這樣就實現了第⑦條所說的目的了。

List的IndexOf方法和Remove方法

microsoft位址 list的indexof 方法 如果t是值型別的,就按照比較值的方法從列表的第乙個元素開始逐個匹配,如果t是引用型別,就比較引用是否相同 舉例如下 classa listlista newlist lista.add newa 3 lista.add newa 4 lista...

List的IndexOf方法和Remove方法

list的indexof 方法 如果t是值型別的,就按照比較值的方法從列表的第乙個元素開始逐個匹配,如果t是引用型別,就比較引用是否相同 舉例如下 class a listlista new list lista.add new a 3 lista.add new a 4 lista.add new...

Java中 List的遍歷

對list的遍歷有三種方式 listlist new arraylist list.add new a list.add new a 第一種 for iteratorit list.iterator it.hasnext 這種方式在迴圈 執行過程中會進行資料鎖定,效能稍差,同時,如果你想在迴圈過程中...