Vector子类
Vector是一个原始无脑的程序类,在JDK1.0就提供了,而后到了JDK1.2的时候由于许多开发者已经习惯了于使用Vector,并且许多系统类也是基于Vector实现的,考虑到其使用的广泛性,所以类集框架将其保存了下来,并且让其多实现了一个List接口,观察Vector的定义结构:
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
继承结构与ArrayList是相同的,所以来讲这个类继承结构如下:
范例:Vector使用
import java.util.List;
import java.util.Vector;
public class LinkedListDemo {
public static void main(String[] args) {
List<String> all = new Vector<>();
all.add("Hello");
all.add("Word!");
all.forEach((String str)->{
System.out.println(str);
});
}
}
Hello
Word!
进一步观察Vector实现:
//无参构造
public Vector() {
this(10); //调用单参构造
}
//单参构造
public Vector(int initialCapacity) {
this(initialCapacity, 0); //调用双参构造
}
//双参构造
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0) //给的空间大小小于0抛出异常
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
在使用无参时默认就会分配10个长度的空间,而后实现操作与ArrayList是相同的,接下来再观察add()方法:
//Vector
public synchronized boolean add(E e) {
modCount++;
add(e, elementData, elementCount);
return true;
}
//ArrayList
public boolean add(E e) {
modCount++;
add(e, elementData, size);
return true;
}
可以发现Voctor采用的是synchronized同步处理(不只是add()方法),而ArrayList没有,所以Vector之中的方法在多线程访问是属于线程安全的,但是性能也会有所下降。