動態刪除ArrayList中的元素

來源:互聯網
上載者:User

  昨天一位項目組同事需要在ArrayList中刪除所有不等於指定值的元素,但是她弄了很久,發現總是刪得不完全。剛好我以前做過類似的功能,就告訴她是因為ArrayList刪除元素後長度變小了,元素的索引也會跟著改變,但是迭代的下標沒有跟著相應的改變的緣故。

  將一些刪除方法做一些總結:

  

 1 /** 2      * 刪除Arraylist中值為"c"的元素 3      */ 4     public static void main(String[] args) { 5          6         List<String> list = new ArrayList<String>(); 7          8         //"c"在Arraylist不連續儲存 9         /*10         list.add("c");11         list.add("a");12         list.add("c");13         list.add("b");14         list.add("c");15         list.add("d");16         list.add("c");17         */18         19         //"c"在Arraylist有連續儲存20         list.add("a");21         list.add("c");22         list.add("c");23         list.add("b");24         list.add("c");25         list.add("c");26         list.add("d");27         list.add("c");28         29         30         //刪除Arraylist中值為"c"的元素31         32         //有可能不能全部刪除33         //removeListElement1(list);34         35         //能夠正確刪除36         //removeListElement2(list);37         38         //能夠正確刪除39         //removeListElement3(list);40     }41     42     43     /**44      *        刪除list中值為"c"的元素45      * 46      *   這種方式:47      *   48      *   當值為"c"的元素在Arraylist中不連續儲存的時候,是可以把值為"c"的元素全部刪掉49      *   50      *   但是當值為"c"的元素在Arraylist中有連續儲存的時候,就沒有把值為"c"的元素全部刪除51      *   因為刪除了元素,Arraylist的長度變小了,索引也會改變,但是迭代的下標沒有跟著變小52      */53     public static void removeListElement1(List<String> list) {54         for(int i=0;i<list.size();i++) {55             if("c".equals(list.get(i))) {56                 list.remove(i);57             }58         }59         60     }61     62     /**63      * 刪除Arraylist中值為"c"的元素64      * 65      * 這種方式:66      * 67      * 不管值為"c"的元素在Arraylist中是否連續,都可以把值為"c"的元素全部刪除68      */69     public static void removeListElement2(List<String> list) {70         for(int i=0;i<list.size();i++) {71             if("c".equals(list.get(i))) {72                 list.remove(i);73                 --i;//刪除了元素,迭代的下標也跟著改變74             }75         }76     }77     78     /**79      * 刪除Arraylist中值為"c"的元素80      * 81      * 這種方式:82      * 83      * 不管值為"c"的元素在list中是否連續,都可以把值為"c"的元素全部刪除84      * 85      * 需保證沒有其他線程同時在修改86      */87     public static void removeListElement3(List<String> list) {88         Iterator<String> iterator = list.iterator();89         while(iterator.hasNext()) {90             String str = iterator.next();91             if("c".equals(str)) {92                 iterator.remove();93             }94             95         }96     }

 

 

 

 

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.