Java Collections Framework之Vector

Hierarchy以下:数组

该类的主要方法以下图所示:安全

三个protect字段函数

      capacityIncrement:每次数组扩充的个数,若是为0,新容量是原来的2倍, 若是不为0,新容量为原来的容量加上此长度,代码体如今:spa

      

     elementCount : 数组中元素的个数。
     elementData:为该Vector的实现数组。线程

     含有两个参数的构造函数:对象

     
     initialCapacity表明该数组的初始化长度,capacityIncrement表明该数组满后的扩张因子。索引

     含有一个参数的构造函数:
      
      此时capacityIncrement为0ci

      不含参数的构造函数:
       
       此时的initialCapacity为10  capacityIncrement为0element

       构造参数类型为Collection的构造函数
       rem

       add(E e):向该Vector中添加一元素
       
       此方法是线程安全的,在给数组新的index赋值前会调用ensureCapacityHelper方法,保证改数组的容量在占满时扩充为新的数组。
        
        扩充为新数组的调用的是
        
        此方法为native方法,依赖于具体的JVM实现。

        add(int index, E element):在指定的位置插入元素
        
         

      此时 该index位置的元素向后移动,而后把obj插入index,这样便影响了效率,该方法一样要检查内部数组是否须要扩张。

      addAll(int index, Collection<? extends E> c):
      将原来index处元素向右移动c.toArray().length个长度,而后将c中的元素复制到elementData数组中。

      addAll(Collection<? extends E> c):
      
      将c中的元素依次复制到elementData数组中(线程安全)

      addElement(E obj):
      
      添加一个元素。

      capacity():
      
      返回该内部数组的长度。

      clear():
      
      
      清空该Vector。

      clone():
      
      
经过该Vector克隆一个新的Vector,该克隆为浅拷贝

      contains(Object o):
      
      
      判断该Vector是否含有某对象o

      containsAll(Collection<?> c):
      
      调用父类AbstractCollection<E>的containsAll(Collection<?> c)的方法。

      copyInto(Object[] anArray):
      
      将该Vector中的元素拷贝至anArray中。

      elementAt(int index):
      
      获取索引为index位置的元素。

      elements():
      
      返回该Vector的枚举表示。

      firstElement():
      
      返回该集合的第一个元素。

       get(int index):
       
       根据索引找到指定的元素。

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

      isEmpty():
      
      判断该集合是否为空。

      lastElement():
        
      该集合的最后一个元素。

      lastIndexOf(Object o, int index):
      
      从该集合的index位置向前查找第一次出现该o的索引。

      remove(int index):
      
      删除该index处的元素,同时后面的元素向前移动,这样会消耗必定的时间。

      remove(Object o):
      
      
      
      从该集合中删除特定的o,可是只会删除第一次出现的这个o,同时后面的依次向左移动。

      removeAll(Collection<?> c):
      
      从该集合中删除c中含有的元素。

      removeRange(int fromIndex, int toIndex):
      
      移除fromIndex到toIndex之间的元素,同时后面的元素左移,空的set为null以便GC回收。

      retainAll(Collection<?> c):
      
      删除该集合中含有c集合中的元素。

      set(int index, E element):
      
      将指定的index位置设置为element,不涉及到先后元素的移动。

      setSize(int newSize):
      
      改变该集合的容量。

      size():
      
      返回该集合的大小。

      subList(int fromIndex, int toIndex):
      
      返回该集合的子集合。

      toArray() :
      
      返回该集合的Object数组表示。

      toArray(T[] a):
      返回该集合的特定的数组表示。

      trimToSize():
      
      缩小容量,刚好撑得下该集合中的元素。

      总结:
              该集合中的全部方法都是线程安全的,保证了状态一致性可是牺牲了运行效率。
              根据索引获取元素很快,按索引删除元素要涉及到后续元素的向前移动,根据对象删除的话还须要先查到该
              元素在集合中的索引,查找某一元素速度相对快些。插入快,删除相对慢,查找相对快。

相关文章
相关标签/搜索