Java使用for循環刪除數據的一些坑

在使用for循環判斷刪除元素,遇到了一些坑,爲了突出效果特地將for循環與迭代進行比較。code

代碼以下:

List<String> list = new ArrayList<>(); list.add("a"); list.add("a"); list.add("b"); list.add("n");

	for (int i = 0; i < list.size(); i++) {
		if("a".equals(list.get(i))){
			list.remove(i);
		}
	}
	
	List<String> list2 = new ArrayList<>();
	list2.add("a");
	list2.add("a");
	list2.add("b");
	list2.add("n");
	
	Iterator<String> iterator = list2.iterator();
	
	while(iterator.hasNext()){
		if("a".equals(iterator.next())){
			iterator.remove();
		}
	}
	
	System.out.println("使用for循環刪除後的結果:"+list);
	System.out.println("使用迭代刪除後的結果:"+list2);

輸出結果以下:

使用for循環刪除後的結果:[a, b, n]
使用迭代刪除後的結果:[b, n]

出現這種狀況的緣由

由於for循環刪除,每刪除一個元素,索引就會發生改變,若是兩個符合條件的元素靠近一塊兒的話。
就會致使只會刪除一個元素的狀況出現,所以,刪除集合元素時建議使用迭代器刪除
相關文章
相關標籤/搜索