• 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 。

  • 相关阅读:
    Android 布局中 如何使控件居中
    VGA, QVGA, HVGA, WVGA, FWVGA和iPhone显示分辨率
    [转+整理] Android 分辨率,密度,像素单位说明
    多线程的知识点总结
    集合的相关信息
    spring cloud详解
    iostat实时监控磁盘util
    Jenkins安装过程
    hdfs的block为什么设置成128M
    shell变量自增的几种方式
  • 原文地址:https://www.cnblogs.com/jessezeng/p/5641596.html
Copyright © 2020-2023  润新知