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

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

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

    容器-數(shù)組-ArrayList

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

    2. ArrayList代碼詳解:

    • 增加元素
      public boolean add(E e) {
        ensureCapacity(size + 1);  // Increments modCount!!
        elementData[size++= e;
        
    return true;
        }
    首先檢查數(shù)組是否已滿,如果滿了就開始擴(kuò)容,擴(kuò)容后的長度為原長度的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表示數(shù)組的操作計(jì)數(shù),用于iterator的時(shí)候與
    expectedMod
    Count比較,防止迭代操作對add,remove等操作影響迭代操作
      
    int oldCapacity = elementData.length;
        
    if (minCapacity > oldCapacity) {         //新插入元素后的長度大于老的長度,數(shù)組開始擴(kuò)容
            Object oldData[] 
    = elementData;
            
    int newCapacity = (oldCapacity * 3)/2 + 1;//新空間為原長度的1.5倍,等于是擴(kuò)容了50%
                
    if (newCapacity < minCapacity)
            newCapacity 
    = minCapacity;
                
    // minCapacity is usually close to size, so this is a win:
                elementData = Arrays.copyOf(elementData, newCapacity);//把之前的元素拷貝到新的數(shù)組    }
        }

    • 刪除元素:

    /**
         * 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
    ++;        //操作計(jì)數(shù)
        E oldValue 
    = (E) elementData[index];

        
    int numMoved = size - index - 1;
        
    if (numMoved > 0)
            System.arraycopy(elementData, index
    +1, elementData, index,//復(fù)制原數(shù)組制定index+1到length-1的元素到elementData的index的索引位
                     numMoved);
        elementData[
    --size] = null// Let gc do its work//最后一位設(shè)置為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];   //直接獲取數(shù)組的索引位
        }

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

    導(dǎo)航

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

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久亚洲精品成人av无码网站| 国产成人精品日本亚洲直接| 亚洲av午夜精品一区二区三区| 免费无码又爽又黄又刺激网站| 亚洲av永久无码精品古装片| 91网站免费观看| 美女扒开屁股让男人桶爽免费| 亚洲色婷婷六月亚洲婷婷6月| 51视频精品全部免费最新| 亚洲国产精品无码久久久秋霞1| 国产精品亚洲美女久久久| 五月亭亭免费高清在线| 日韩精品亚洲专区在线影视| 亚洲av永久无码精品表情包| 成人免费无码大片A毛片抽搐 | 亚洲综合最新无码专区| 日韩午夜理论免费TV影院| 国产成人亚洲精品电影| 24小时免费直播在线观看| 黄 色一级 成 人网站免费| 亚洲人成黄网在线观看| 亚洲五月综合缴情在线观看| 99re热免费精品视频观看| 一个人看的免费高清视频日本 | 成年网站免费入口在线观看| 久久久久亚洲Av无码专| 亚洲精品成人a在线观看| 美女裸身网站免费看免费网站| 久青草视频在线观看免费| 日韩欧美亚洲中文乱码| 亚洲一级视频在线观看| 亚洲国产精品成人久久| 亚洲国产高清在线一区二区三区| 久久久久国色AV免费看图片| 久久免费线看线看| 亚洲国产高清在线| 亚洲片一区二区三区| 免费的一级片网站| 美女网站免费福利视频| 日韩精品内射视频免费观看 | 成在人线av无码免费高潮水|