集合---List (2)

List可以分爲ArrayList,LinkedList,Vector等分支。List的特性是可重複數據,有序。

ArrayList的底層實現是數組,默認容量爲10,當需要擴容時,會變爲原來容量的1.5倍。因爲是數組實現,ArrayList適合查找數據。

/**
     * Default initial capacity.          默認容量爲10
     */                    
    private static final int DEFAULT_CAPACITY = 10;
 public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;            
        return true;
    }

private void ensureCapacityInternal(int minCapacity) {
        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
            minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
        }

        ensureExplicitCapacity(minCapacity);
    }
    private void ensureExplicitCapacity(int minCapacity) {
        modCount++;

        // overflow-conscious code
        if (minCapacity - elementData.length > 0)
            grow(minCapacity);
    }
    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);       //原本容量右移一位,縮小爲原來的一半,加上原                 容量本身,即變爲1.5倍容量
        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);
    }

LinkedList靠鏈表實現,默認容量是0,其中有addFirst()和addLast(),add()默認使用addLast()。

transient int size = 0;     //默認容量


public boolean add(E e) {      //默認add方法添加到鏈表尾部
        linkLast(e);
        return true;
    }

Vector也是通過數組實現的,相比較於ArrayList,這種集合線程安全,但速度較慢。默認容量也爲10,但擴容時會變爲原來的2倍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章