java1.7集合源码阅读: Vector

Posted jessezeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java1.7集合源码阅读: Vector相关的知识,希望对你有一定的参考价值。

 Vector是List接口的另一实现,有非常长的历史了,从jdk1.0开始就有Vector了,先于ArrayList出现,与ArrayList的最大区别是:Vector 是线程安全的,简单浏览一下Vector:

类定义:

1 public class Vector<E>
2     extends AbstractList<E>
3     implements List<E>, RandomAccess, Cloneable, java.io.Serializable

Vector支持快速随机访问,和arrayList一样。

Vector 初始容量为10,支持自定义每次扩容长度,如果不自定义扩容长度,那么默认扩容后的长度是原来的2倍。

 1  /**
 2      * Constructs an empty vector with the specified initial capacity and
 3      * capacity increment.
 4      *
 5      * @param   initialCapacity     the initial capacity of the vector
 6      * @param   capacityIncrement   the amount by which the capacity is
 7      *                              increased when the vector overflows
 8      * @throws IllegalArgumentException if the specified initial capacity
 9      *         is negative
10      */
11     public Vector(int initialCapacity, int capacityIncrement) {
12         super();
13         if (initialCapacity < 0)
14             throw new IllegalArgumentException("Illegal Capacity: "+
15                                                initialCapacity);
16         this.elementData = new Object[initialCapacity];
17         this.capacityIncrement = capacityIncrement;
18     }
19 
20     /**
21      * Constructs an empty vector with the specified initial capacity and
22      * with its capacity increment equal to zero.
23      *
24      * @param   initialCapacity   the initial capacity of the vector
25      * @throws IllegalArgumentException if the specified initial capacity
26      *         is negative
27      */
28     public Vector(int initialCapacity) {
29         this(initialCapacity, 0);
30     }
31 
32     /**
33      * Constructs an empty vector so that its internal data array
34      * has size {@code 10} and its standard capacity increment is
35      * zero.
36      */
37     public Vector() {
38         this(10);
39     }

Vector最大的特点是Vector内部基本上都使用了synchronized进行同步或者调用使用了 synchronized同步关键字的方法:

  1    /**
  2      * Returns {@code true} if this vector contains the specified element.
  3      * More formally, returns {@code true} if and only if this vector
  4      * contains at least one element {@code e} such that
  5      * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
  6      *
  7      * @param o element whose presence in this vector is to be tested
  8      * @return {@code true} if this vector contains the specified element
  9      */
 10     public boolean contains(Object o) {
 11         return indexOf(o, 0) >= 0;
 12     }
 13 
 14     /**
 15      * Returns the index of the first occurrence of the specified element
 16      * in this vector, or -1 if this vector does not contain the element.
 17      * More formally, returns the lowest index {@code i} such that
 18      * <tt>(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i)))</tt>,
 19      * or -1 if there is no such index.
 20      *
 21      * @param o element to search for
 22      * @return the index of the first occurrence of the specified element in
 23      *         this vector, or -1 if this vector does not contain the element
 24      */
 25     public int indexOf(Object o) {
 26         return indexOf(o, 0);
 27     }
 28 
 29     /**
 30      * Returns the index of the first occurrence of the specified element in
 31      * this vector, searching forwards from {@code index}, or returns -1 if
 32      * the element is not found.
 33      * More formally, returns the lowest index {@code i} such that
 34      * <tt>(i&nbsp;&gt;=&nbsp;index&nbsp;&amp;&amp;&nbsp;(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i))))</tt>,
 35      * or -1 if there is no such index.
 36      *
 37      * @param o element to search for
 38      * @param index index to start searching from
 39      * @return the index of the first occurrence of the element in
 40      *         this vector at position {@code index} or later in the vector;
 41      *         {@code -1} if the element is not found.
 42      * @throws IndexOutOfBoundsException if the specified index is negative
 43      * @see     Object#equals(Object)
 44      */
 45     public synchronized int indexOf(Object o, int index) {
 46         if (o == null) {
 47             for (int i = index ; i < elementCount ; i++)
 48                 if (elementData[i]==null)
 49                     return i;
 50         } else {
 51             for (int i = index ; i < elementCount ; i++)
 52                 if (o.equals(elementData[i]))
 53                     return i;
 54         }
 55         return -1;
 56     }
 57 
 58     /**
 59      * Returns the index of the last occurrence of the specified element
 60      * in this vector, or -1 if this vector does not contain the element.
 61      * More formally, returns the highest index {@code i} such that
 62      * <tt>(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i)))</tt>,
 63      * or -1 if there is no such index.
 64      *
 65      * @param o element to search for
 66      * @return the index of the last occurrence of the specified element in
 67      *         this vector, or -1 if this vector does not contain the element
 68      */
 69     public synchronized int lastIndexOf(Object o) {
 70         return lastIndexOf(o, elementCount-1);
 71     }
 72 
 73     /**
 74      * Returns the index of the last occurrence of the specified element in
 75      * this vector, searching backwards from {@code index}, or returns -1 if
 76      * the element is not found.
 77      * More formally, returns the highest index {@code i} such that
 78      * <tt>(i&nbsp;&lt;=&nbsp;index&nbsp;&amp;&amp;&nbsp;(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i))))</tt>,
 79      * or -1 if there is no such index.
 80      *
 81      * @param o element to search for
 82      * @param index index to start searching backwards from
 83      * @return the index of the last occurrence of the element at position
 84      *         less than or equal to {@code index} in this vector;
 85      *         -1 if the element is not found.
 86      * @throws IndexOutOfBoundsException if the specified index is greater
 87      *         than or equal to the current size of this vector
 88      */
 89     public synchronized int lastIndexOf(Object o, int index) {
 90         if (index >= elementCount)
 91             throw new IndexOutOfBoundsException(index + " >= "+ elementCount);
 92 
 93         if (o == null) {
 94             for (int i = index; i >= 0; i--)
 95                 if (elementData[i]==null)
 96                     return i;
 97         } else {
 98             for (int i = index; i >= 0; i--)
 99                 if (o.equals(elementData[i]))
100                     return i;
101         }
102         return -1;
103     }

Vector 的实现实际上跟ArrayList差别不大,ArrayList可参考 java1.7集合源码阅读:ArrayList 。

 

以上是关于java1.7集合源码阅读: Vector的主要内容,如果未能解决你的问题,请参考以下文章

java1.7集合源码阅读: Stack

JAVA 集合类(java.util)源码阅读笔记------Vector

JavaSE_坚持读源码_HashSet对象_Java1.7

jdk源码阅读笔记之java集合框架(基础篇)

JavaSE_坚持读源码_Class对象_Java1.7

Java源码解析|HashMap的前世今生