欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线

Java如何遍歷集合并把其中的某些元素刪除

本篇內容介紹了“Java如何遍歷集合并把其中的某些元素刪除”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

成都創新互聯是一家集網站建設,莫力達企業網站建設,莫力達品牌網站建設,網站定制,莫力達網站建設報價,網絡營銷,網絡優化,莫力達網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。

本文基于jdk1.8來分析ArrayList的源碼

首先是主要的成員變量。

  /**
   * Default initial capacity.
   **/
  private static final int DEFAULT_CAPACITY = 10;
  /**
   * Shared empty array instance used for empty instances.
   **/
  private static final Object[] EMPTY_ELEMENTDATA = {};
  /**
   * Shared empty array instance used for default sized empty instances. We
   * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
   * first element is added.
   **/
  private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
  /**
   * The array buffer into which the elements of the ArrayList are stored.
   * The capacity of the ArrayList is the length of this array buffer. Any
   * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
   * will be expanded to DEFAULT_CAPACITY when the first element is added.
   **/
  transient Object[] elementData; // non-private to simplify nested class access
  /**
   * The size of the ArrayList (the number of elements it contains).
   *
   * @serial
   **/
  private int size;

其中初始大小為10,size表示集合中元素的個數。此外,還有兩個空數組EMPTY_ELEMENTDATA,和DEFAULTCAPACITY_EMPTY_ELEMENTDATA。通過DEFAULTCAPACITY_EMPTY_ELEMENTDATA的注釋,我們可以了解到,這個變量區別于EMPTY_ELEMENTDATA,主要是為了決定第一個元素插入時,擴容多大的問題。從這里的描述可以理解到,ArrayList創建好后,其實并沒有真正分配數組空間,而是在第一個元素插入時,才分配的空間。這一點是區別于jdk1.6的。在jdk1.6中,ArrayList一創建,數據空間就默認分配好了,10個或指定的空間。jdk1.8這么做,可以做到空間延遲分配,提高程序性能。

接下來看一下構造函數。

/**
   * Constructs an empty list with an initial capacity of ten.
   **/
  public ArrayList() {
    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
  }
/**
   * Constructs an empty list with the specified initial capacity.
   *
   * @param initialCapacity the initial capacity of the list
   * @throws IllegalArgumentException if the specified initial capacity
   *     is negative
   **/
  public ArrayList(int initialCapacity) {
    if (initialCapacity > 0) {
      this.elementData = new Object[initialCapacity];
    } else if (initialCapacity == 0) {
      this.elementData = EMPTY_ELEMENTDATA;
    } else {
      throw new IllegalArgumentException("Illegal Capacity: "+
                        initialCapacity);
    }
  }

無參構造函數,將創建一個長度為0的空數組。

有參構造函數,參數大于0時正常創建數組,參數為0時,也是創建長度為0的數組。但它和無參構造函數創建的空數組是可以區別開的,它們使用了不同的對象。

接下來是插入元素add。

/**
   * Appends the specified element to the end of this list.
   *
   * @param e element to be appended to this list
   * @return <tt>true</tt> (as specified by {@link Collection#add})
   **/
  public boolean add(E e) {
    ensureCapacityInternal(size + 1); // Increments modCount!!
    elementData[size++] = e;
    return true;
  }
 private void ensureCapacityInternal(int minCapacity) {
    ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
  }
 private static int calculateCapacity(Object[] elementData, int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
      return Math.max(DEFAULT_CAPACITY, minCapacity);
    }
    return minCapacity;
  }
 private void ensureExplicitCapacity(int minCapacity) {
    modCount++;
    // overflow-conscious code
    if (minCapacity - elementData.length > 0)
      grow(minCapacity);
  }

通過calculateCapacity函數,我們可以知道,如果是用new ArrayList()創建的list,第一次add元素,計算得minCapacity = 1。如果是new ArrayList(0)創建的list,計算得minCapacity = 10. 然后再根據minCapacity去grow。

get方法比較簡單,這里不再分析。

ArrayList的一個常見問題是ConcurrentModificationException,同步修改異常,也稱為快速失敗,fast-fail。當我們以foreach方式遍歷ArrayList時,如果在遍歷過程中刪除ArrayList的元素,或者別的線程往ArrayList中添加元素,就會拋出該異常。這里需要注意,以for(int i = 0; i < list.size(); i++)的方式遍歷ArrayList時,是不會拋出同步修改異常的,但用這種方式遍歷,需要處理好i的前進速度。

那么,用foreach方式遍歷ArrayList為什么會拋出同步修改異常呢?

foreach代碼的底層實現,是用iterator對ArrayList進行遍歷,在遍歷過程中,會持續調用next獲取下一個元素。next方法中,會首先checkForComodification(),它的作用是檢查modCount和expectedModCount是否相等。不相等時,則拋出同步修改異常。那么什么情況下修改次數和期望修改次數不相等呢?這里需要首先弄明白,modCount和expectedModCount是什么東西?modCount是ArrayList從它的父類繼承來的屬性,記錄了集合的修改次數,add,remove時都會給modCount加1. expectedModCount是迭代器的成員變量,它是在創建迭代器時,取的modCount的值,并且,在遍歷過程中不再改變。那么就清楚了,expectedModCount其實是開始遍歷時modCount的值,如果在遍歷過程中,ArrayList進行了add或remove操作,那么必然導致expectedModCount和modCount不相等,于是就拋出了同步修改異常。

public E next() {
      checkForComodification();
      int i = cursor;
      if (i >= size)
        throw new NoSuchElementException();
      Object[] elementData = ArrayList.this.elementData;
      if (i >= elementData.length)
        throw new ConcurrentModificationException();
      cursor = i + 1;
      return (E) elementData[lastRet = i];
    }
    final void checkForComodification() {
      if (modCount != expectedModCount)
        throw new ConcurrentModificationException();
    }

那么,同步修改異常如何避免呢?或者說,我們如何遍歷集合并把其中的某些元素刪除呢?

答案是使用迭代器的remove方法刪除元素。在迭代器的remove方法中,刪除元素后,會重新把modCount賦值給expectedModCount,所以,它不會拋出同步修改異常。

 public void remove() {
      if (lastRet < 0)
        throw new IllegalStateException();
      checkForComodification();
      try {
        ArrayList.this.remove(lastRet);
        cursor = lastRet;
        lastRet = -1;
        expectedModCount = modCount;
      } catch (IndexOutOfBoundsException ex) {
        throw new ConcurrentModificationException();
      }
    }

“Java如何遍歷集合并把其中的某些元素刪除”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!

分享文章:Java如何遍歷集合并把其中的某些元素刪除
標題URL:http://www.kartarina.com/article20/pjdgco.html

成都網站建設公司_創新互聯,為您提供移動網站建設響應式網站網站導航靜態網站云服務器虛擬主機

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設公司
欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线
欧美日韩电影在线播放| 国产a区久久久| 成人欧美一区二区三区白人| 久久一二三国产| 久久综合狠狠综合久久综合88| 精品嫩草影院久久| 精品久久久久久无| 久久久精品tv| 国产精品日韩精品欧美在线| 日本一区二区动态图| 亚洲欧洲色图综合| 一区二区三区精品视频| 亚洲成人av一区二区| 日本怡春院一区二区| 久久av老司机精品网站导航| 国产一区二区网址| 国产99精品在线观看| 色综合激情五月| 欧美日韩精品欧美日韩精品| 日韩一级二级三级| 国产精品污网站| 一区二区三区中文在线| 日本中文一区二区三区| 国产成人精品免费网站| 97超碰欧美中文字幕| 欧美日韩国产123区| 国产午夜精品美女毛片视频| 亚洲视频每日更新| 麻豆成人久久精品二区三区小说| 国产iv一区二区三区| 欧美日韩电影在线播放| 久久久国产精品午夜一区ai换脸| 亚洲乱码国产乱码精品精的特点| 青青草91视频| 99riav久久精品riav| 在线成人午夜影院| **性色生活片久久毛片| 青娱乐精品视频| 91日韩在线专区| 久久久午夜精品理论片中文字幕| 亚洲精品免费在线播放| 国产又黄又大久久| 欧美三级在线播放| 中文字幕亚洲在| 国产一区二区毛片| 4438成人网| 一区二区三区中文免费| 国产米奇在线777精品观看| 欧美视频一区在线| 国产精品久久久久久久久久久免费看 | 最新高清无码专区| 韩国女主播成人在线| 欧美日韩免费观看一区二区三区 | 成人毛片在线观看| 日韩精品一区在线观看| 亚洲日本va午夜在线电影| 精品在线亚洲视频| 欧美日韩一区二区三区高清| 国产精品久久久久永久免费观看 | 99精品欧美一区二区三区小说 | 日韩电影一区二区三区四区| 色综合天天视频在线观看| 国产亚洲一区字幕| 精品系列免费在线观看| 欧美一级免费大片| 视频一区在线播放| 欧美日韩日日夜夜| 亚洲电影在线免费观看| 一本色道久久综合狠狠躁的推荐| 欧美激情一区二区三区蜜桃视频| 激情五月播播久久久精品| 制服丝袜av成人在线看| 调教+趴+乳夹+国产+精品| 欧美色爱综合网| 亚洲一区二区精品视频| 欧美日精品一区视频| 亚洲综合区在线| 在线免费观看日本一区| 亚洲精品成人少妇| 91黄色激情网站| 亚洲一区二区三区美女| 欧美性感一类影片在线播放| 亚洲福利电影网| 欧美一区二区三区小说| 久久av资源站| 欧美经典一区二区三区| 91在线观看一区二区| 一区二区三区色| 91精品国产麻豆| 国内精品伊人久久久久av影院| 日韩精品最新网址| 丁香六月综合激情| 国产精品传媒视频| 欧美性猛片xxxx免费看久爱| 日韩精品亚洲一区二区三区免费| 日韩欧美国产一区在线观看| 国产麻豆精品在线观看| 一区视频在线播放| 在线不卡的av| 国产成人激情av| 亚洲综合视频网| 精品国产露脸精彩对白| 成a人片亚洲日本久久| 亚洲自拍偷拍网站| 2021国产精品久久精品| 99久久精品一区二区| 另类小说色综合网站| 精品美女一区二区三区| av一区二区不卡| 日韩电影免费一区| 中文字幕乱码亚洲精品一区| 欧美日韩亚洲综合| 国产91在线观看| 三级影片在线观看欧美日韩一区二区 | 91在线观看成人| 久久精品久久精品| 日韩伦理电影网| 精品久久久久久久久久久久久久久 | 夜夜揉揉日日人人青青一国产精品| 欧美一级欧美三级| 91蝌蚪porny成人天涯| 久久国产婷婷国产香蕉| 亚洲激情综合网| 久久久久久**毛片大全| 精品视频1区2区3区| 国产91精品一区二区麻豆网站| 亚洲va欧美va天堂v国产综合| 欧美激情一区在线| 精品免费99久久| 欧美绝品在线观看成人午夜影视| 丁香啪啪综合成人亚洲小说 | 久久一二三国产| 欧美一区二区私人影院日本| 成人国产精品免费观看动漫| 精品一区二区三区影院在线午夜| 亚洲一区二区三区爽爽爽爽爽| 日本一二三不卡| 久久综合色一综合色88| 日韩亚洲欧美在线| 欧美精品一卡二卡| 欧美色综合天天久久综合精品| 97久久超碰国产精品电影| 国产麻豆欧美日韩一区| 九九九精品视频| 男女男精品网站| 天天色天天操综合| 午夜成人在线视频| 亚洲高清免费视频| 亚洲国产精品视频| 午夜视频在线观看一区二区| 亚洲午夜日本在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 久久精品夜色噜噜亚洲a∨| 久久众筹精品私拍模特| 久久综合一区二区| 久久精品欧美一区二区三区不卡| 精品国产凹凸成av人网站| 精品日韩在线一区| 久久久精品天堂| 国产精品全国免费观看高清 | 久久亚洲精精品中文字幕早川悠里| 日韩欧美一级片| 精品国产乱码久久| 久久久精品天堂| 国产精品灌醉下药二区| 国产精品高清亚洲| 亚洲综合一区在线| 日韩高清不卡一区二区三区| 久久99久久精品欧美| 国产成人免费av在线| 91玉足脚交白嫩脚丫在线播放| 91蜜桃免费观看视频| 欧美色综合网站| 欧美哺乳videos| 国产精品久久毛片| 一级特黄大欧美久久久| 日本一区中文字幕| 国产高清在线观看免费不卡| 不卡一区二区中文字幕| 欧美色男人天堂| 久久综合中文字幕| 亚洲精品日韩一| 激情综合五月婷婷| 色婷婷亚洲婷婷| 日韩一级片在线播放| 国产精品初高中害羞小美女文| 亚洲国产视频一区| 国产精品白丝av| 欧美在线不卡视频| 久久久久久久久久看片| 亚洲一区二区三区四区在线| 久热成人在线视频| 91久久精品国产91性色tv| 日韩美女天天操| 亚洲精品少妇30p| 国产精品1区2区3区在线观看| 欧美午夜精品久久久| 久久久久97国产精华液好用吗| 亚洲一二三四区不卡| 国产成人av电影|