Java 集合之List 集合的刪除方法順序分析以及remove和removeAll區別
在上一篇 《Java 集合之List 集合的新增方法順序分析以及add和addAll區別》中已經分析過
對於List集合順序從前到後的分析論證,這裡將不再詳細分析 remove()方法的順序
此篇將就 remove()和removeAll()的區別分析
java的 List 集合中 使用 remove 刪除元素,同時集合的 size 會發生變化
一、remove()方法:
語法1 remove(Object element)刪除名為 element 的元素
語法2 remove(int index)刪除集合索引 index 處的元素
接下來用一個例子 看 使用 remove(Object element
public class TestList { public static void main(String args[]) { // 結果: Hello Learn List list = new ArrayList(); list.add("Hello"); list.add("World"); list.add("Hello"); list.add("Learn"); // 到此為止若遍歷則輸出 Hello World Hello Learn list.remove("Hello"); // 1 到此為止若遍歷則輸出 World Hello Learn list.remove(0); // 2 上一步執行後 下標為0 處的是 World 故這步移除world for (int i = 0; i < list.size(); i++) { // 輸出結果 System.out.print(list.get(i)+" "); } } }
因為 List集合的元素的存入順序是從頭開始。
1 處程式碼 list.remove( "Hello" ) 執行後, remove掉的 Hello 是 第一個新增 的元素 Hello 、原先第二個新增的 Hello 不受影響。
此時當前集合中元素的第一位變成了 World,
故 2 處的程式碼利用帶下標方法 list.remov( 0 ) 執行後將刪除當前集合中下標為 0 的元素 ,World 被移除。
輸出結果為:
注意 remove(Object element)方法只在當前集合中按順序移除一個元素。即使後邊還有 與 element 相同的元素。也不再刪除
二、removeAll()方法
注意removeAll()中沒有帶下標的方法
語法 removeAll(collection c)刪除集合索引 index 處的元素
這裡新增一個新的 list2 集合。將之前的 list 集合新增到 list2 中
public class TestList {
public static void main(String args[]) {
List list = new ArrayList();
list.add("Hello");
list.add("World");
list.add("Hello");
list.add("Learn"); // 到此為止若遍歷 list 輸出 Hello World Hello Learn
System.out.println("-----list的輸出結果-----");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+" ");
}
List list2 = new ArrayList();
//測試區,這是開始位置
list2.add(list); // 1
//這是結束位置,以下測試程式碼將代入到這塊區域中
System.out.println("\n-----list2的輸出結果-----");
for (int i = 0; i < list2.size(); i++) {
System.out.print(list2.get(i)+" ");
}
System.out.println("\nlist2的長度為:"+list2.size());
}
}
輸出結果為:
1 處程式碼通過 add()方法將 list 新增到 list2 集合中,注意add()方法加入的長度為1 ,
即把此前的 list 當做一個元素集合來處理,並且以陣列形式顯示,(上篇中已提到)
此時在1 處程式碼之後寫上一行 remove 方法的程式碼
測試區程式碼:
list2.remove(0);
此時 list2 中的元素下標為 0 的第一位元素將刪除,即 list2 中沒有元素
輸出結果:
若將上邊 1 處之後程式碼改為
list2.remove(list2);
輸出結果:
結果和最初的程式碼結果沒有變化,list2.remove(list2) 程式碼不起作用。 remove()方法中沒有刪除集合物件的方法
以上程式碼行 改為:
list2.removeAll(list2);
執行結果:
刪除成功,因為removeAll()方法中引數為 集合物件。
同理,利用 addAll()方法將 list 新增到 list2 中 ,即 1 1處程式碼改為
list2.addAll(list);
之後加入程式碼行
list2.removeAll(list2);
執行結果同上圖執行結果。
若將 list2.addall(list) 後的程式碼行改為
list2.remove(list2);
執行結果同最初,該行程式碼仍然不起作用
因此得出結論。remove()方法不能刪除傳入的集合物件。
即括號引數只能是 remove(Object element)和 remove(int index)
而 removeAll()方法中引數只能是 一個集合物件 。而不能是 一個元素名稱
如 list.removeAll("Hello"); 提示錯誤 。不被允許輸入。
如果想刪除list裡所有資料 則呼叫clear()方法