<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)  編輯  收藏 所屬分類: 高級

    導航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产精华液网站w| heyzo亚洲精品日韩| 亚洲午夜久久影院| a毛片全部播放免费视频完整18| 免费国产成人午夜私人影视 | 亚洲AV日韩精品久久久久久| 永久免费观看黄网站| 国产在线19禁免费观看国产 | caoporn成人免费公开| 亚洲高清无码综合性爱视频| 日日躁狠狠躁狠狠爱免费视频| 免费人成在线观看网站视频| 日韩在线观看免费完整版视频| 亚洲综合色区在线观看| 成人免费一区二区三区| 国产亚洲一区二区精品| 国产一级片免费看| 亚洲毛片免费观看| 成人免费视频小说| 美女视频黄频a免费观看| 最新亚洲成av人免费看| 久久aⅴ免费观看| 亚洲ts人妖网站| 国产最新凸凹视频免费| 久久久久久毛片免费看| 在线观看亚洲人成网站| 久久久www成人免费毛片| 久久精品亚洲日本波多野结衣| 亚洲AⅤ无码一区二区三区在线 | 亚洲国产激情在线一区| 国产免费看插插插视频| 国产美女视频免费观看的网站 | 国产亚洲免费的视频看| 亚洲国产情侣一区二区三区| 日本免费高清一本视频| 中文字幕的电影免费网站| 亚洲精品在线免费看| 免费萌白酱国产一区二区| 国产成人精品无码免费看| 亚洲精品国产精品| 婷婷亚洲久悠悠色悠在线播放|