ArrayList和Vector都是继承AbstractList,ArrayList 是有序存储的链表结构,都可以通过下标访问数据。ArrayLsit比较新。 Vector 比较旧, Java 一出现就有了,ArrayList 是java2出现的。
- 首先来说 ArrayList 提供了
private static final int DEFAULT_CAPACITY = 10;
所以说也就是说ArrayList 有默认的初始大小,大小为十
Vector 对应的地方呢
protected int elementCount;
但是Vector提供的构造方法中
public Vector() {
this(10);
}
所以说Vector 的初始值也是10,当然你也可以使用其他的构造方法初始化Vector
Vector 提供了初始化的构造方法
public Vector(int initialCapacity, int capacityIncrement)
可以初始化容量和容量增长因子
Vector 默认增长为原来两倍,而 ArrayList 是原来的 1.5 倍
ArrayLsit新的容量计算:
int newCapacity = oldCapacity + (oldCapacity >> 1)
-
Vector 类中都是加入synchronized 的关键字的,所以Vector 是线程安全的,而ArrayList 实体类中一个synchronized 关键字都没有, 所以Vector 的效率肯定是比ArrayList低。
Vector:
public synchronized int indexOf(Object o, int index) {
ArrayList:
public int indexOf(Object o) {
-
他们的最大值都是
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
我在网上搜了一下,大致是说 减8只是为了避免一些机器内存溢出,最大长度依然是Integer.MAX_VALUE,并不是Integer.MAX_VALUE-8, 所以-8 是为减少出错的机率。