激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java中List刪除時需要的注意事項(xiàng)

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

2020-07-27 14:45張飛_ Java教程

最近在利用java中的LIST在刪除時發(fā)現(xiàn)了一個錯我,通過查找相關(guān)的資料終于解決了,覺著有必要分享處理給同樣遇到這個問題的朋友參考,下面這篇文章主要介紹了java中List刪除時需要的注意事項(xiàng),需要的朋友可以一起來看看吧。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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é)果是:

?
1
2
3
4
5
1
 
2
 
3

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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();
     
  }
 
}

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

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

總結(jié)

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

原文鏈接:http://www.cnblogs.com/zhangfei/p/4510584.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩精品一二三 | 国产高潮好爽受不了了夜色 | 欧洲黄色一级视频 | 精品国产一区二区三区四区阿崩 | 亚洲精品成人18久久久久 | 成人国产在线看 | 一级做a爰性色毛片免费 | 一区二区三区手机在线观看 | 双性精h调教灌尿打屁股的文案 | 国产乱淫a∨片免费观看 | 国产免费观看电影网站 | 亚洲片在线 | 国产精品久久久久久模特 | 国产免费美女 | 国产91大片 | 欧美日韩综合视频 | 欧美一级高潮片免费的 | 国产精品hd免费观看 | 日韩在线播放第一页 | 成年免费视频黄网站在线观看 | 精品一区二区在线播放 | 激情综合在线观看 | 97超级碰碰人国产在线观看 | 国产jjizz一区二区三区视频 | 欧美性生视频 | 日韩视频在线不卡 | 精品国产一区二区三区四 | 国产成人精品免高潮在线观看 | 久草在线视频看看 | 国产大片全部免费看 | 久久爽精品区穿丝袜 | 把娇妻调教成暴露狂 | 成人不卡 | 日本免费不卡一区二区 | 欧美一级黄色录像片 | 综合网日日天干夜夜久久 | 国产精品99久久久久久久女警 | 九九黄色 | 日韩精品久久久久久久九岛 | 在线播放免费播放av片 | 操操电影 |