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

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

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

    容器-數組-ArrayList

    1. ArrayList概要:
    • 默認長度為10
                     public ArrayList() {
                    this(10);
                     }
    • 底層采用數組存儲private transient Object[] elementData;
            transient表示數組elementData不需要通過serialization序列化傳輸
    • 線程不安全,在多線程場景會出現問題,可以考慮使用Vector或者Collections.synchronizedList同步該容器
    • 查詢效率比較高,比較適用于查詢
    • 擴容的長度為初始長度的一半,建議初始化的時候設置已知的長度,免得容器自己去擴容,浪費空間以及效率

    2. ArrayList代碼詳解:

    • 增加元素
      public boolean add(E e) {
        ensureCapacity(size + 1);  // Increments modCount!!
        elementData[size++= e;
        
    return true;
        }
    首先檢查數組是否已滿,如果滿了就開始擴容,擴容后的長度為原長度的1.5倍。
    /**
         * Increases the capacity of this <tt>ArrayList</tt> instance, if
         * necessary, to ensure that it can hold at least the number of elements
         * specified by the minimum capacity argument.
         *
         * 
    @param   minCapacity   the desired minimum capacity
         
    */
        
    public void ensureCapacity(int minCapacity) {
        modCount
    ++;//modCount表示數組的操作計數,用于iterator的時候與
    expectedMod
    Count比較,防止迭代操作對add,remove等操作影響迭代操作
      
    int oldCapacity = elementData.length;
        
    if (minCapacity > oldCapacity) {         //新插入元素后的長度大于老的長度,數組開始擴容
            Object oldData[] 
    = elementData;
            
    int newCapacity = (oldCapacity * 3)/2 + 1;//新空間為原長度的1.5倍,等于是擴容了50%
                
    if (newCapacity < minCapacity)
            newCapacity 
    = minCapacity;
                
    // minCapacity is usually close to size, so this is a win:
                elementData = Arrays.copyOf(elementData, newCapacity);//把之前的元素拷貝到新的數組    }
        }

    • 刪除元素:

    /**
         * Removes the element at the specified position in this list.
         * Shifts any subsequent elements to the left (subtracts one from their
         * indices).
         *
         * 
    @param index the index of the element to be removed
         * 
    @return the element that was removed from the list
         * 
    @throws IndexOutOfBoundsException {@inheritDoc}
         
    */
        
    public E remove(int index) {
        RangeCheck(index); //檢查索引是否溢出

        modCount
    ++;        //操作計數
        E oldValue 
    = (E) elementData[index];

        
    int numMoved = size - index - 1;
        
    if (numMoved > 0)
            System.arraycopy(elementData, index
    +1, elementData, index,//復制原數組制定index+1到length-1的元素到elementData的index的索引位
                     numMoved);
        elementData[
    --size] = null// Let gc do its work//最后一位設置為null

        
    return oldValue;
        }

     /**
         * Checks if the given index is in range.  If not, throws an appropriate
         * runtime exception.  This method does *not* check if the index is
         * negative: It is always used immediately prior to an array access,
         * which throws an ArrayIndexOutOfBoundsException if index is negative.
         
    */
        
    private void RangeCheck(int index) {
        
    if (index >= size)
            
    throw new IndexOutOfBoundsException(
            
    "Index: "+index+", Size: "+size);
        }

    • 獲取元素:
     /**
         * Returns the element at the specified position in this list.
         *
         * 
    @param  index index of the element to return
         * 
    @return the element at the specified position in this list
         * 
    @throws IndexOutOfBoundsException {@inheritDoc}
         
    */
        
    public E get(int index) {
        RangeCheck(index);

        
    return (E) elementData[index];   //直接獲取數組的索引位
        }

    posted on 2012-02-20 14:28 陳睿 閱讀(1104) 評論(0)  編輯  收藏 所屬分類: 高級

    導航

    <2012年2月>
    2930311234
    567891011
    12131415161718
    19202122232425
    26272829123
    45678910

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一区二区在线视频| 在线观看亚洲天天一三视| 亚洲日本国产精华液| 久久午夜夜伦鲁鲁片免费无码| 中文字幕亚洲专区| 日韩在线视频线视频免费网站| 国产精品久久香蕉免费播放| 亚洲av无码专区在线电影| 在线天堂免费观看.WWW| 亚洲永久网址在线观看| 在线观看成人免费| 日本系列1页亚洲系列| 精品无码国产污污污免费网站国产| 亚洲国产精品国产自在在线| 久久久久久毛片免费看| 亚洲精品国产精品乱码视色 | 国产AV日韩A∨亚洲AV电影| 免费的涩涩视频在线播放| 亚洲丰满熟女一区二区哦| 成人亚洲综合天堂| 亚洲成人免费网站| 大地资源二在线观看免费高清| 亚洲av永久中文无码精品| 亚洲国产午夜福利在线播放| a级成人毛片免费图片| xvideos亚洲永久网址| 好吊色永久免费视频大全| 99久久亚洲精品无码毛片| 曰批全过程免费视频在线观看 | 97人妻精品全国免费视频| 性做久久久久免费观看| 一区二区三区免费高清视频| 亚洲AV午夜福利精品一区二区| 日本系列1页亚洲系列| 亚洲一区AV无码少妇电影☆| 99视频免费播放| 国产亚洲av片在线观看16女人 | 久久亚洲中文字幕精品一区| 久久青草精品38国产免费| 亚洲熟妇丰满xxxxx| 国产亚洲精品自在线观看|