1. 程式人生 > >JAVA List迴圈佇列刪除元素/List.remove

JAVA List迴圈佇列刪除元素/List.remove

         想試一下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--,讓刪除那一條以後,下標也向前移一位就可以了,現在順序就對了。