1. 程式人生 > >JAVA學習之路---刪除集合中的元素

JAVA學習之路---刪除集合中的元素

1.有的時候在做業務邏輯處理的時候, 我們需要刪除集合中的元素。可是如何按照正常的邏輯進行刪除,往往達不到預期的效果,那就是報錯。以下展示通過foreach迴圈進行元素的刪除,會出現如下錯誤。

程式碼展示:

public static void main(String[] args) {
		//集合中新增元素資訊
		List<String> list1 = new ArrayList<String>();
		for (int i = 0; i < 10; i++) {
			list1.add("測試" + (i + 1));
		}
		
		System.out.println("===============刪除之前集合中的元素資訊=============");
		for(String str : list1){
			System.out.println(str);
		}
		System.out.println("===============刪除之前集合中的元素資訊=============");
		
		
		for(String str : list1){
			if("測試1".equals(str)){
				list1.remove(str);
			}
		}
	}

報錯資訊:


出現錯誤的原因是因為foreach的底層通過iterator實現的,iterator不允許集合在遍歷的同時進行元素的刪除。

解決方法:通過iterator的remove()方法進行刪除

public static void main(String[] args) {
		//集合中新增元素資訊
		List<String> list1 = new ArrayList<String>();
		for (int i = 0; i < 10; i++) {
			list1.add("測試" + (i + 1));
		}
		
		System.out.println("===============刪除之前集合中的元素資訊=============");
		for(String str : list1){
			System.out.println(str);
		}
		System.out.println("===============刪除之前集合中的元素資訊=============");
		
		<span style="color:#cc0000;">Iterator<String> iterator = list1.iterator();
		
		while(iterator.hasNext()){
			String str = iterator.next();
			if("測試1".equals(str)){
				iterator.remove();
			}
		}</span>
		
		System.out.println("===============刪除之後集合中的元素資訊=============");
		for(String str : list1){
			System.out.println(str);
		}
		System.out.println("===============刪除之後集合中的元素資訊=============");
	}

解決方法二:
<span style="font-size:18px;">public static void main(String[] args) {
		//集合中新增元素資訊
		List<String> list1 = new ArrayList<String>();
		for (int i = 0; i < 10; i++) {
			list1.add("測試" + (i + 1));
		}
		
		System.out.println("===============刪除之前集合中的元素資訊=============");
		for(String str : list1){
			System.out.println(str);
		}
		System.out.println("===============刪除之前集合中的元素資訊=============");
		
		
		//刪除集合中的元素
		<span style="color:#cc0000;">for (int i = list1.size() - 1; i >= 0; i--) {
			String str = list1.get(i);
			if("測試1".equals(str)){
				list1.remove(i);
			}
			if("測試2".equals(str)){
				list1.remove(i);
			}
		}</span>
		
		System.out.println("===============刪除之後集合中的元素資訊=============");
		for(String str : list1){
			System.out.println(str);
		}
		System.out.println("===============刪除之後集合中的元素資訊=============");
	}</span>
測試結果如下圖

根據程式碼我們看出,並沒有按照常規的方法進行刪除,因為如何按照從陣列的開始端進行刪除,沒刪除一個元素,陣列中的索引就會向前移動,當我們通過索引獲取陣列中的元素已經不再是原來的元素了。所以我們選擇從陣列或者集合的末端進行元素的刪除,這樣就不會出現上述通過索引獲取元素不在是實際的元素。