java collections读书笔记(3) vector(1)
2013-06-14 09:14 很大很老实 阅读(248) 评论(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。