<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

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品国产精品国自产观看| 四色在线精品免费观看| 亚洲愉拍99热成人精品热久久 | 亚洲另类图片另类电影| 日本亚洲欧美色视频在线播放 | 亚洲AV成人一区二区三区观看 | 亚洲特级aaaaaa毛片| 99亚洲精品卡2卡三卡4卡2卡| 好吊色永久免费视频大全| 亚洲中文无码永久免费| 亚洲中文字幕久久精品无码APP| 亚洲色图激情文学| 久久久久国产免费| 久久亚洲一区二区| 亚洲精品免费网站| 亚洲av永久无码精品秋霞电影秋| 国产精品麻豆免费版| 日本一区二区三区免费高清在线| 国产亚洲精品自在线观看| 免费91麻豆精品国产自产在线观看 | 亚洲高清免费在线观看| 亚洲专区中文字幕| 国产福利免费观看| 国精产品一区一区三区免费视频 | 99视频在线精品免费| 亚洲一区二区三区免费观看| 国产日产成人免费视频在线观看| 日本激情猛烈在线看免费观看| 亚洲尤码不卡AV麻豆| 黄页免费的网站勿入免费直接进入| 亚洲成av人在线观看网站| 国外亚洲成AV人片在线观看| 免费A级毛片无码视频| 亚洲国产成人AV在线播放| 亚洲一区二区三区在线播放| 99在线在线视频免费视频观看 | 一级中文字幕免费乱码专区| 久久亚洲精精品中文字幕| 国产精品另类激情久久久免费| 最近更新免费中文字幕大全| 亚洲一区二区三区香蕉|