国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java中List刪除時(shí)需要的注意事項(xiàng)

2019-11-26 13:14:28
字體:
供稿:網(wǎng)友

java中的LIST在刪除時(shí),一般會(huì)用list.remove(o); 但這樣往往會(huì)出現(xiàn)問題,先來看下面的這段代碼:

package com.demo; import java.util.ArrayList;import java.util.List; public class Test11 {     public void delete(){    List<Integer> list = new ArrayList<Integer>();    list.add(1);    list.add(2);    list.add(2);    list.add(3);    for (int i = 0; i < list.size(); i++) {      if(list.get(i)==2){        list.remove(i);      }    }    this.outputList(list);  }     private void outputList(List<Integer> list){    for (Integer i : list) {      System.out.println(i);    }  }   public static void main(String[] args) {    Test11 t = new Test11();    t.delete();       } }

返回結(jié)果是:

123

這結(jié)果顯然不是我們的預(yù)期,我們是希望刪除List中所有為2的元素,但輸出結(jié)果中卻出現(xiàn)了2,這是因?yàn)樵趇等于1時(shí),刪除了List中的index為1的元素2,這時(shí)候list為[1,2,3], 但接下來,i遞增后,等于2,在list.get(i)時(shí),取出來的結(jié)果就成為了3了,也就是說隨著list元素的刪除,index是隨之變化的,這就是其中的陷阱,于是,我們得尋找一個(gè)在刪除時(shí),索引不發(fā)生變化的迭代方式來刪除,而iterator是被創(chuàng)建之后會(huì)建立一個(gè)指向原來對象的單鏈索引表,當(dāng)原來的對象數(shù)量發(fā)生變化時(shí),這個(gè)索引表的內(nèi)容不會(huì)同步改變,也就是用cursor來維護(hù)這個(gè)索引表,于是,可以這樣來刪除:

package com.demo; import java.util.ArrayList;import java.util.Iterator;import java.util.List; public class Test11 {     public void delete(){    List<Integer> list = new ArrayList<Integer>();    list.add(1);    list.add(2);    list.add(2);    list.add(3);    this.iteratorDelete(list.iterator(), 2);    this.outputList(list);  }     private void iteratorDelete(Iterator<Integer> it, int deleteObject){    while(it.hasNext()){      int i = it.next();      if(i==deleteObject){        it.remove();      }    }  }     private void outputList(List<Integer> list){    for (Integer i : list) {      System.out.println(i);    }  }   public static void main(String[] args) {    Test11 t = new Test11();    t.delete();       } }

 這個(gè)代碼結(jié)果就是正確的了!

可能有人會(huì)說,我是在iterator中刪除的,為什么list的值會(huì)發(fā)生改變?這個(gè)問題,自已思考去吧!思考不出來,可以轉(zhuǎn)行了!

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 建水县| 阳山县| 班玛县| 建阳市| 宣威市| 新安县| 大埔县| 丰原市| 广南县| 南丹县| 桃园市| 西青区| 安吉县| 通山县| 淮滨县| 西贡区| 藁城市| 鹿泉市| 剑河县| 宣汉县| 随州市| 日土县| 东至县| 沁源县| 江口县| 滕州市| 浦县| 海伦市| 河西区| 齐河县| 福泉市| 油尖旺区| 江达县| 霍城县| 黄大仙区| 两当县| 慈利县| 文水县| 开远市| 大同县| 禹城市|