代码改变世界

java collections读书笔记(3) vector(1)

2013-06-14 09:14  很大很老实  阅读(247)  评论(0编辑  收藏  举报

---恢复内容开始---

如果你知道数组的大小,并且数组成员都是相同类型的话,那么,Array,绝对是一个不错的选择。

可是,如果这个数据结构是动态变化的,而你并不知道最后的大小(尤其是最大),你该怎么办?这个时候,Vector就是不错的选择。同时,java还提供了stack类,

用来实现最常见的后进先出的数据结构。

在java1.0和java1.1的时候,Vector和Stack的类层次关系是这样的:

 

而从java1.2开始,在引入了java collections framework后,结构变成了这样的:

什么类型都可以存到vector中,唯一的例外是,java原生数据,因为他们不是类,哈。

 

vector类功能汇总:

vector是线性安全的。

1)创建Vector:

     public Vector():创建缺省为10个元素的结构,看源代码如下:  

public Vector() {
        this(10);
    }

再看源代码,另外两种初始化类的方式:

 public Vector(int initialCapacity, int capacityIncrement) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
        this.capacityIncrement = capacityIncrement;
    }

public Vector(int initialCapacity) {
        this(initialCapacity, 0);
    }

如果知道大致的尺寸大小,建议在创建vector的时候,就设定为这个尺寸的大小,否则,每次超过尺寸后,vector内部都会创建一个新的Array,然后进行copy,这都是消耗时间和性能的。

理论上来说,你可以把任何一个collections对象的元素转换成vector,比如:

Vector v = new Vector(Arrays.asList(array));
增加元素:

1)增加元素到最后:

  public boolean add(Object element)
public void addElement(Object element)

 2)增加元素到中间

  public void add(int index, Object element)
public void insertElementAt(Object element, int index)

  需要注意的是,如果index不对,会抛出ArrayIndexOutOfBoundsException异常。

3)增加另一个集合

  public boolean addAll(Collection c)
  public boolean addAll(int index, Collection c)

Vector加入原生类型

 由于vector只能存储对象,因此,对一些原生类型数据,需要做一个小小的封装,把它们封装成类,一般来说,类名只是原生类型的第一个字母大写,比如:

PRIMITIVE TYPE WRAPPER CLASS
byte         Byte
short         Short
int         Integer
long         Long
float         Float
double       Double
char         Character
boolean       Boolean

 

import java.util.Vector;
public class PrimVector {
public static void main (String args[]) {
Vector v = new Vector();
for (int i=1; i<=10; i++) {
v.add(new Integer(i));
}
}
}

这么写,eclipse会提示一个warning:

vector is a raw type。Reference to generic type Vector<E> should

这只是说明,最好强调vector的类型,可以忽略这个warning。