JAVA學習之路---刪除集合中的元素
阿新 • • 發佈:2019-02-08
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>
根據程式碼我們看出,並沒有按照常規的方法進行刪除,因為如何按照從陣列的開始端進行刪除,沒刪除一個元素,陣列中的索引就會向前移動,當我們通過索引獲取陣列中的元素已經不再是原來的元素了。所以我們選擇從陣列或者集合的末端進行元素的刪除,這樣就不會出現上述通過索引獲取元素不在是實際的元素。