Java Collections Framework之Vector

openkk 12年前發布 | 16K 次閱讀 Java Java開發

Hierarchy如下:

Java Collections Framework之Vector

該類的主要方法如下圖所示:

Java Collections Framework之Vector

三個protect字段

      capacityIncrement:每次數組擴充的個數,如果為0,新容量是原來的2倍, 如果不為0,新容量為原來的容量加上此長度,代碼體現在:

      Java Collections Framework之Vector

     elementCount : 數組中元素的個數。
     elementData:為該Vector的實現數組。

     含有兩個參數的構造函數:

     Java Collections Framework之Vector
     initialCapacity代表該數組的初始化長度,capacityIncrement代表該數組滿后的擴張因子。

     含有一個參數的構造函數:
      Java Collections Framework之Vector
      此時capacityIncrement為0

      不含參數的構造函數:
       Java Collections Framework之Vector
       此時的initialCapacity為10  capacityIncrement為0

       構造參數類型為Collection的構造函數
       Java Collections Framework之Vector

       add(E e):向該Vector中添加一元素
       Java Collections Framework之Vector
       此方法是線程安全的,在給數組新的index賦值前會調用ensureCapacityHelper方法,保證改數組的容量在占滿時擴充為新的數組。
        Java Collections Framework之Vector
        擴充為新數組的調用的是
        Java Collections Framework之Vector
        此方法為native方法,依賴于具體的JVM實現。

        add(int index, E element):在指定的位置插入元素
        Java Collections Framework之Vector
         

Java Collections Framework之Vector

      此時 該index位置的元素向后移動,然后把obj插入index,這樣便影響了效率,該方法同樣要檢查內部數組是否需要擴張。

      addAll(int index, Collection c):
      將原來index處元素向右移動c.toArray().length個長度,然后將c中的元素復制到elementData數組中。

      addAll(Collection c):
      Java Collections Framework之Vector
      將c中的元素依次復制到elementData數組中(線程安全)

      addElement(E obj):
      Java Collections Framework之Vector
      添加一個元素。

      capacity():
      Java Collections Framework之Vector
      返回該內部數組的長度。

      clear():
      Java Collections Framework之Vector
      Java Collections Framework之Vector
      清空該Vector。

      clone():
      Java Collections Framework之Vector
      
通過該Vector克隆一個新的Vector,該克隆為淺拷貝

      contains(Object o):
      Java Collections Framework之Vector
      Java Collections Framework之Vector
      判斷該Vector是否含有某對象o

      containsAll(Collection c):
      Java Collections Framework之Vector
      調用父類AbstractCollection 的containsAll(Collection c)的方法。

      copyInto(Object[] anArray):
      Java Collections Framework之Vector
      將該Vector中的元素拷貝至anArray中。

      elementAt(int index):
      Java Collections Framework之Vector
      獲取索引為index位置的元素。

      elements():
      Java Collections Framework之Vector
      返回該Vector的枚舉表示。

      firstElement():
      Java Collections Framework之Vector
      返回該集合的第一個元素。

       get(int index):
       Java Collections Framework之Vector
       根據索引找到指定的元素。

       insertElementAt(E obj, int index):
       Java Collections Framework之Vector
      在指定的位置插入某元素。

      isEmpty():
      Java Collections Framework之Vector
      判斷該集合是否為空。

      lastElement():
      Java Collections Framework之Vector  
      該集合的最后一個元素。

      lastIndexOf(Object o, int index):
      Java Collections Framework之Vector
      從該集合的index位置向前查找第一次出現該o的索引。

      remove(int index):
      Java Collections Framework之Vector
      刪除該index處的元素,同時后面的元素向前移動,這樣會消耗一定的時間。

      remove(Object o):
      Java Collections Framework之Vector
      Java Collections Framework之Vector
      Java Collections Framework之Vector
      從該集合中刪除特定的o,但是只會刪除第一次出現的這個o,同時后面的依次向左移動。

      removeAll(Collection c):
      Java Collections Framework之Vector
      從該集合中刪除c中含有的元素。

      removeRange(int fromIndex, int toIndex):
      Java Collections Framework之Vector
      移除fromIndex到toIndex之間的元素,同時后面的元素左移,空的set為null以便GC回收。

      retainAll(Collection c):
      Java Collections Framework之Vector
      刪除該集合中含有c集合中的元素。

      set(int index, E element):
      Java Collections Framework之Vector
      將指定的index位置設置為element,不涉及到前后元素的移動。

      setSize(int newSize):
      Java Collections Framework之Vector
      改變該集合的容量。

      size():
      Java Collections Framework之Vector
      返回該集合的大小。

      subList(int fromIndex, int toIndex):
      Java Collections Framework之Vector
      返回該集合的子集合。

      toArray() :
      Java Collections Framework之Vector
      返回該集合的Object數組表示。

      toArray(T[] a):
      返回該集合的特定的數組表示。

      trimToSize():
      Java Collections Framework之Vector
      縮小容量,恰好撐得下該集合中的元素。

      總結:
              該集合中的所有方法都是線程安全的,保證了狀態一致性但是犧牲了運行效率。
              根據索引獲取元素很快,按索引刪除元素要涉及到后續元素的向前移動,根據對象刪除的話還需要先查到該
              元素在集合中的索引,查找某一元素速度相對快些。插入快,刪除相對慢,查找相對快。

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!