<code id="qf3hh"></code>
  • <menuitem id="qf3hh"></menuitem>
  • <strike id="qf3hh"><label id="qf3hh"></label></strike>

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

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

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

      昨天一位項(xiàng)目組同事需要在ArrayList中刪除所有不等于指定值的元素,但是她弄了很久,發(fā)現(xiàn)總是刪得不完全。剛好我以前做過類似的功能,就告訴她是因?yàn)锳rrayList刪除元素后長度變小了,元素的索引也會(huì)跟著改變,但是迭代的下標(biāo)沒有跟著相應(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ù)存儲(chǔ)
       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ù)存儲(chǔ)
      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      *   當(dāng)值為"c"的元素在Arraylist中不連續(xù)存儲(chǔ)的時(shí)候,是可以把值為"c"的元素全部刪掉
      49      *   
      50      *   但是當(dāng)值為"c"的元素在Arraylist中有連續(xù)存儲(chǔ)的時(shí)候,就沒有把值為"c"的元素全部刪除
      51      *   因?yàn)閯h除了元素,Arraylist的長度變小了,索引也會(huì)改變,但是迭代的下標(biāo)沒有跟著變小
      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;//刪除了元素,迭代的下標(biāo)也跟著改變
      74             }
      75         }
      76     }
      77     
      78     /**
      79      * 刪除Arraylist中值為"c"的元素
      80      * 
      81      * 這種方式:
      82      * 
      83      * 不管值為"c"的元素在list中是否連續(xù),都可以把值為"c"的元素全部刪除
      84      * 
      85      * 需保證沒有其他線程同時(shí)在修改
      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ù)制代碼

      国产一级婬片AAA毛,无码中文精品视视在线观看,欧美日韩a人成v在线动漫,五月丁香青草久久
      <code id="qf3hh"></code>
    • <menuitem id="qf3hh"></menuitem>
    • <strike id="qf3hh"><label id="qf3hh"></label></strike>