• <th id="kadjp"></th>

            1. ?
                開發(fā)技術(shù) / Technology

                動態(tài)刪除ArrayList中的元素

                日期:2015年1月29日  作者:zhjw  來源:互聯(lián)網(wǎng)    點擊:674

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

                  將一些刪除方法做一些總結(jié):

                  

                復(fù)制代碼
                 1 /**
                 2      * 刪除Arraylist中值為"c"的元素
                 3      */
                 4     public static void main(String[] args) {
                 5         
                 6         List<String> list = new ArrayList<String>();
                 7         
                 8         //"c"在Arraylist不連續(xù)存儲
                 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有連續(xù)存儲
                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中不連續(xù)存儲的時候,是可以把值為"c"的元素全部刪掉
                49      *   
                50      *   但是當值為"c"的元素在Arraylist中有連續(xù)存儲的時候,就沒有把值為"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中是否連續(xù),都可以把值為"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中是否連續(xù),都可以把值為"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     }
                復(fù)制代碼

                国产欧美在线观看,国产精品白浆冒出视频,91精品国产91热久久久福利,大伊香蕉在线精品视频97 国产精品美女久久福利 国产精品黄的免费观看
              • <th id="kadjp"></th>