JAVA List迴圈佇列刪除元素/List.remove
阿新 • • 發佈:2018-12-31
想試一下List.remove的方法看下怎麼比較的。偶然看部落格的時候發現有個博主說, “迴圈刪除list中多個元素的,應該使用迭代器iterator方式。(其他的方法不行)”
而且下面點贊數還挺多的,這我就不能忍了。正好測了一下。直接放結論吧。正常使用的java三種List遍歷方式分別是,
1.for迴圈遍歷,
2.增強for迴圈遍歷
3.iterator遍歷三種。
那位博主的結論是用方法1的方式進行刪除,會導致序列變亂,無法刪除,方法2不行,方法3 可以,所以使用方法3
直接上測試程式碼吧
public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); //for 迴圈刪除 可行 /* for(int i=0; i<list.size();i++){ System.out.println(list.get(i)); list.remove(list.get(i)); i--; }*/ //刪除不了 /*for(String x:list){ System.out.println(x); list.remove(x); }*/ //Iterator 迴圈刪除 可行 Iterator<String> iterable=list.iterator(); while(iterable.hasNext()){ String thisIte=iterable.next(); System.out.println(thisIte); iterable.remove(); } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } for(String x:list){ System.err.println(x); } }
結果可知 第一種方式 第三種方式刪除 可行,但是 第二種不行
第一種方式直接刪除不行的原因是因為按照原來的size 進行for迴圈遍歷刪除,當有一條刪除以後,其實後面佇列的順序向前移動了一位。打個比方,123456是順序佇列,2被刪除了,本來下一輪獲取是3,但是因為2被刪除了,下標前移,實際上下一輪獲取的是4了。這個時候,把i--,讓刪除那一條以後,下標也向前移一位就可以了,現在順序就對了。