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

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

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

    Ytl's Java Blog

    厚積而薄發---每一天都是一個全新的開始
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Java 原碼代碼學習

    Posted on 2011-09-24 15:30 ytl 閱讀(305) 評論(0)  編輯  收藏 所屬分類: 學習總結
    ArrayList
           關于Java中的transient,volatile和strictfp關鍵字 http://www.iteye.com/topic/52957
           (1), ArrayList底層使用Object數據實現, private transient Object[] elementData;且在使用不帶參數的方式實例化時,生成數組默認的長度是10。
          (2),  add方法實現
          public boolean add(E e) {
               //ensureCapacityInternal判斷添加新元素是否需要重新擴大數組的長度,需要則擴否則不
              ensureCapacityInternal(size + 1);  // 此為JDK7調用的方法 JDK5里面使用的ensureCapacity方法
              elementData[size++] = e; //把對象插入數組,同時把數組存儲的數據長度size加1
              return true;
          }
         JDK 7中 ensureCapacityInternal實現
       private void ensureCapacityInternal(int minCapacity) {
            modCount++;修改次數
            // overflow-conscious code
            if (minCapacity - elementData.length > 0)
                grow(minCapacity);//如果需要擴大數組長度
        }
    /**
         * The maximum size of array to allocate. --申請新數組最大長度
         * Some VMs reserve some header words in an array.
         * Attempts to allocate larger arrays may result in
         * OutOfMemoryError: Requested array size exceeds VM limit  --如果申請的數組占用的內心大于JVM的限制拋出異常
         */
        private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;//為什么減去8看注釋第2行
        /**
         * Increases the capacity to ensure that it can hold at least the
         * number of elements specified by the minimum capacity argument.
         *
         * @param minCapacity the desired minimum capacity
         */
        private void grow(int minCapacity) {
            // overflow-conscious code
            int oldCapacity = elementData.length;
            int newCapacity = oldCapacity + (oldCapacity >> 1); //新申請的長度為old的3/2倍同時使用位移運算更高效,JDK5中: (oldCapacity *3)/2+1
            if (newCapacity - minCapacity < 0)  
                newCapacity = minCapacity; 
            if (newCapacity - MAX_ARRAY_SIZE > 0) //你懂的
                newCapacity = hugeCapacity(minCapacity);
            // minCapacity is usually close to size, so this is a win:
            elementData = Arrays.copyOf(elementData, newCapacity);
        }
     //可以申請的最大長度
        private static int hugeCapacity(int minCapacity) { 
            if (minCapacity < 0) // overflow
                throw new OutOfMemoryError();
            return (minCapacity > MAX_ARRAY_SIZE) ?
                Integer.MAX_VALUE :
                MAX_ARRAY_SIZE;
        }



    主站蜘蛛池模板: 亚洲成AV人片在线观看| 亚洲av色香蕉一区二区三区| 四虎影视精品永久免费| 亚洲人成免费电影| 国产在线观看无码免费视频| 色偷偷噜噜噜亚洲男人| 亚洲a视频在线观看| 99人中文字幕亚洲区| 亚洲中文字幕在线乱码| 免费一级毛片一级毛片aa| 久久精品女人天堂AV免费观看| 久久久久久AV无码免费网站| 亚洲一级片免费看| 人妻仑刮八A级毛片免费看| 亚洲精品伦理熟女国产一区二区| 亚洲国产成人久久三区| 精品亚洲成a人片在线观看少妇 | 亚洲网红精品大秀在线观看| 最新亚洲成av人免费看| 亚洲精品国产综合久久一线| 日韩a级毛片免费观看| 午夜一级毛片免费视频| 女性无套免费网站在线看| 两个人的视频高清在线观看免费| 国产乱子精品免费视观看片| 最近免费中文字幕大全高清大全1 最近免费中文字幕mv在线电影 | 香蕉视频亚洲一级| 亚洲精品无码久久久久APP| 亚洲天堂2016| 亚洲午夜无码久久久久小说| 亚洲va成无码人在线观看| 亚洲成无码人在线观看| 亚洲毛片一级带毛片基地| 亚洲狠狠狠一区二区三区| 亚洲视频一区在线观看| 亚洲欧洲国产综合| 亚洲人成电影青青在线播放| 亚洲无mate20pro麻豆| 亚洲日韩精品无码专区加勒比☆| 亚洲色大成网站www| 国产青草亚洲香蕉精品久久 |