java ArrayList 和 Vector 的区别详解
这里有新鲜出炉的 Java 并发编程示例, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 java ArrayList 和 Vector 的区别详解的相关资料, 并附简单实例代码, 需要的朋友可以参考下
ArrayList 和 Vector 的区别
相同点:
1ArrayList 和 Vector 都是继承了相同的父类和实现了相同的接口
2 底层都是数组实现的
3 初始默认长度都为 10
不同点:
1 同步性:
Vector 中的 public 方法多数添加了 synchronized 关键字, 以确保方法同步, 也即是 Vector 线程安全, ArrayList 线程不安全
2 扩容不同
内部属性不同, 这可能是导致扩容方式不同的原因所在
ArrayList 有两个属性, 存储数据的数组 elementData, 和存储记录数目的 size
Vector 有三个属性, 存储数据的数组 elementData, 存储记录数目的 elementCount, 还有扩展数组大小的扩展因子 capacityIncrement
ArrayList 的扩展方法
- //jdk1.8.0_91
- private void grow(int minCapacity) {
- // overflow-conscious code
- int oldCapacity = elementData.length;
- int newCapacity = oldCapacity + (oldCapacity >> 1);
- if (newCapacity - minCapacity < 0)
- newCapacity = minCapacity;
- if (newCapacity - MAX_ARRAY_SIZE > 0)
- newCapacity = hugeCapacity(minCapacity);
- // minCapacity is usually close to size, so this is a win:
- elementData = Arrays.copyOf(elementData, newCapacity);
- }
可以看出, 在满足扩容条件时, 扩展后数组大小为原数组长度的 1.5 倍与传递参数中较大者
Vector 的扩展方法
- //jdk1.8.0_91
- private void grow(int minCapacity) {
- // overflow-conscious code
- int oldCapacity = elementData.length;
- int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
- capacityIncrement : oldCapacity);
- if (newCapacity - minCapacity < 0)
- newCapacity = minCapacity;
- if (newCapacity - MAX_ARRAY_SIZE > 0)
- newCapacity = hugeCapacity(minCapacity);
- elementData = Arrays.copyOf(elementData, newCapacity);
- }
可以看出, 当扩容因子大于 0 时, 新数组长度为原数组长度 + 扩容因子, 否则子新数组长度为原数组长度的 2 倍 将上面生成的新数组长度与传递的参数长度作比较, 较大者为最终的新长度
来源: http://www.phperz.com/article/18/0205/359542.html