<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 22, 文章 - 0, 評論 - 1, 引用 - 0
    數據加載中……

    ArrayList的源碼閱讀筆記

    JDK版本:1.7
    1,使用構造方法或者addAll()方法批量加入某個Collection的元素時,為了效率考慮,是調用目標的toArray()方法,然后批量數組復制的。
    2,在添加單個元素或批量添加元素時,都要檢查一下確保數組可以容納本次操作所要添加的數目,必要時擴展數組。
    3,擴展數組時做到“一步到位”,在“容納本次添加操作的最小數組長度”和“當前數組長度的1.5倍”之間取最大值。
    4,為效率考慮,contains()、indexOf()和lastIndexOf()方法采用的是數組循環遍歷,而不是調用自身的迭代器。
    5,調用clone()后的新對象,修改計數器modCount會被重置為0.
    6,數組從某一位置起批量移動的時候調用System.arraycopy(),源數組與目標數組為同一個,指定起始位置和偏移量即可。
    7,與移除元素有關的方法僅僅是將目標位置設為null,其余的交給GC。
    8,調用clear()之后,數組長度不變,只是改了引用和size——必要時可以調用trimToSize()來縮小數組到真實容量。
    9,調用removeAll()和retainAll()取空集和交集時,在自身的數組上遍歷,用遍歷過的部分當作新的存儲空間,需要讀寫指針各一個。
     1     private boolean batchRemove(Collection<?> c, boolean complement) {
     2         final Object[] elementData = this.elementData;
     3         int r = 0, w = 0;
     4         boolean modified = false;
     5         try {
     6             for (; r < size; r++)
     7                 if (c.contains(elementData[r]) == complement)
     8                     elementData[w++] = elementData[r];
     9         } finally {
    10             // Preserve behavioral compatibility with AbstractCollection,
    11             // even if c.contains() throws.
    12             if (r != size) {
    13                 System.arraycopy(elementData, r,
    14                                  elementData, w,
    15                                  size - r);
    16                 w += size - r;
    17             }
    18             if (w != size) {
    19                 for (int i = w; i < size; i++)
    20                     elementData[i] = null;
    21                 modCount += size - w;
    22                 size = w;
    23                 modified = true;
    24             }
    25         }
    26         return modified;
    27     }
    這里沒看懂的是方法第一行為什么要聲明一個“final”的引用,代碼結構上完全可以去掉,是為了執行效率?
    10,內部數組是transient類型的,不會被自動序列化。序列化時會將“數組長度值”和“順序排列的數組元素流”依次跟在“默認ArrayList對象流”后面。
    11,每次內容修改都會更改modCount計數器。迭代器初始化時復制此計數器,之后每次迭代都檢查此計數器以實現快速失敗特性。
    12,subList只是一個指向parentList的包裝視圖,且可以多層包裝。

    posted on 2012-09-07 18:50 王星游 閱讀(266) 評論(0)  編輯  收藏 所屬分類: java

    主站蜘蛛池模板: 国产av无码专区亚洲国产精品| 精品剧情v国产在免费线观看| 精品国产亚洲男女在线线电影| 亚洲高清毛片一区二区| 一二三四影视在线看片免费| 亚洲va在线va天堂成人| 成人影片麻豆国产影片免费观看| 亚洲国产高清在线精品一区| 亚洲av福利无码无一区二区| 亚洲日韩国产欧美一区二区三区 | xxxxx做受大片在线观看免费| 一本色道久久88综合亚洲精品高清| 美女黄频a美女大全免费皮| 全亚洲最新黄色特级网站| rh男男车车的车车免费网站| 77777亚洲午夜久久多人| a视频在线观看免费| 99亚洲精品高清一二区| 永久免费的网站在线观看| 亚洲av成人中文无码专区| 免费中文字幕一级毛片| 精品国产免费一区二区三区香蕉| 国产一精品一AV一免费孕妇| 亚洲人成色在线观看| 亚洲国产精品成人网址天堂| 中文字幕一区二区免费| 亚洲另类自拍丝袜第1页| 日本免费一区二区三区最新vr| 一个人看的免费高清视频日本| 亚洲Av熟妇高潮30p| 午夜免费不卡毛片完整版| 一级做a爱过程免费视频高清| 亚洲三级电影网址| 青草草在线视频永久免费| CAOPORM国产精品视频免费| 亚洲福利一区二区| 亚洲国产精品无码久久青草| 日韩免费在线观看视频| 亚洲AV性色在线观看| 亚洲av无码乱码国产精品fc2| 中文字幕乱码免费看电影|