如何一次性刪除List裏的所有元素?

       一次性刪除List裏的所有元素?不僅聽起來簡單(只是有個在刪除元素時元素下標動態變化的問題在裏面,有點苦惱),而且做起來其實也簡單(大話了,只是到了後面解決了後才覺得簡單的),得益於一同行問的“js中刪除元素時下標從1變爲0”的問題。

    出現問題的代碼是這樣的(他的是javascript代碼,我用java的List模擬):

  1.     List list = new ArrayList();  
  2.     list.add("1");  
  3.     list.add("2");  
  4.     list.add("3");  
  5.     list.add("4");  
  6.     list.add("5");  
  7.     list.add("6");  
  8.     for (int i = 0; i < list.size(); i++) {  
  9.         System.out.print(list.get(i)+" ");  
  10.     }  
  11.     System.out.println("");  //多的輸出語句只是爲了方便看運行結果。
  12.     System.out.println("------------------");  
  13.     for (int i = 0; i < list.size(); i++) {  
  14.         list.remove(i);  
  15.     }  
  16.     for (int i = 0; i < list.size(); i++) {  
  17.         System.out.print(list.get(i)+" ");  
  18.     } 

    他原本想把所有的元素都給刪除的,結果最後打印出來的結果是這樣的,有些沒有被刪除掉

     List打印結果

  1. 123456  
  2. --------  
  3. 246 

    看看,這結果很明顯出問題了,對吧?本來想把所有的元素都給刪除,結果竟然行事不果斷,“斬草沒有除掉根”,悲劇了,還剩下3個( 我竟然會想到斬草除根這個詞,暗暗佩服自己。)。他一開始就思考到了問題的最根本原因,就是第二次刪除的時候,原本下標爲1的元素的下標就由1變爲0了,原本下標爲2的元素下標由2變爲了1,由此而做了替死鬼,真是冤枉啊,真是的。所以,2未被刪除,3就被刪除了更何況本身List的長度也在變化,長度影響遍歷刪除的次數,這裏不贅述。一直到for循環最後也依然阻止不了這場悲劇的發生( 該是幸運吧,總算有元素活下來了,但對於我們編代碼的就要受罪了),以此類推。

    我的解決方法是這樣的:

    考慮到元素下標每次都要減1變爲0(其實,我錯了,是元素下標隔1降1),何不如用兩個變量來控制循環?我就給了兩個變量i和j。i來控制循環次數,j來去除下標動態變化的條件,len解決list長度變化的問題。

代碼如下:

  1. for (int i = 0,j = 0,len = list.size(); i < len; i++) {       
  2.  list.remove(j);             
  3. }       
  4. 還有另一個“狗血”版本:  
  5. for (int i = 0,j = 0i < list.size(); ) {        
  6. list.remove(j);             
  7. }  

代碼運行的結果是:

    List的打印信息 

  1. 123456  
  2. -------- 

    結果倒是正常輸出了,可兩個結果,怎麼看怎麼不好。

    但最終他自己想到了最優化的代碼。他優化後的代碼如下:

  1. for (int i = 0; i < list.size(); i++) {  
  2.      list.remove(i--);  

    從這件小事可以看出,分享起作用了,他把這個問題分享給了我,我把我的想法分享給了他,而我們由共同由此解決了問題,找到了可行的答案。所以說,分享是一種好習慣。而且,我始終堅信,會分享、會幫助別人的人他註定會海納百川,也會有更多的人會體會到分享的快樂。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章