从源码分析ArrayList和Vector区别
来源:互联网 发布:易企cms怎么换模板 编辑:程序博客网 时间:2024/05/17 23:26
最近在看JDK源码,现在从源码角度分析下ArrayList和Vector区别
注:本文源码基于JDK1.6
1.构造器
先从构造器入手在适合不过
ArrayList有三个构造器:
- public ArrayList(int initialCapacity)//构造一个具有指定初始容量的空列表。
- public ArrayList()//构造一个初始容量为10的空列表。
- public ArrayList(Collection<? extends E> c)//构造一个包含指定 collection 的元素的列表
- public Vector()//使用指定的初始容量和等于零的容量增量构造一个空向量。
- public Vector(int initialCapacity)//构造一个空向量,使其内部数据数组的大小,其标准容量增量为零。
- public Vector(Collection<? extends E> c)//构造一个包含指定 collection 中的元素的向量
- public Vector(int initialCapacity,int capacityIncrement)//使用指定的初始容量和容量增量构造一个空的向量
总结:Vector比Arraylist多一个构造方法,没错就是public Vector(int initialCapacity,int capacityIncrement)这个构造方法, capacityIncrement就是容量增长,即前面所说的增长因子,ArrayList中是没有的
2.Add方法
ArrayList:
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
vector:
private void ensureCapacityHelper(int minCapacity) {
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object[] oldData = elementData;
int newCapacity = (capacityIncrement > 0) ?
(oldCapacity + capacityIncrement) : (oldCapacity * 2);
if (newCapacity < minCapacity) {
newCapacity = minCapacity;
}
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
总结:ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍
3.线程安全
vector中很多方法都是用关键字synchronized修饰而ArrayList则没有
总结:Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销
4.成员变量
ArrayList:
private transient Object[] elementData;
vector:
protected Object[] elementData;
总结:ArrayList和vector内部都是通过数组实现,但ArrayList是私有的不可序列化
- 从源码分析ArrayList和Vector区别
- 从源码分析ArrayList和LinkList的区别
- 从源码分析ArrayList和LinkList的区别
- ArrayList 和Vector区别
- Vector和ArrayList区别
- 区别:Vector和ArrayList
- Vector和ArrayList区别
- Arraylist和Vector区别
- ArrayList和Vector区别
- 源码分析ArrayList/Vector/LinkedList
- 从源代码看ArrayList和Vector的真正区别
- 从源代码看ArrayList和Vector的真正区别
- ArrayList和Vector的区别
- ArrayList和Vector的区别
- ArrayList和Vector的区别
- ArrayList和Vector的区别
- ArrayList和Vector的区别
- vector和arrayList,LinkedList区别
- Unity3D 自定义UI组件画圆、圆弧、扇形
- 3D建模与处理软件简介
- Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程
- 四种以太网帧格式
- 阿里实习生测试二面(2017.4.11)
- 从源码分析ArrayList和Vector区别
- 电源键关机
- OOP思想应该怎样来理解?
- 使用MVP+Retrofit+RxJava实现的的Android Demo (上)使用Nuclues库实现MVP
- RxJava & RxAndroid简单使用(3)
- POJ-3621-01分数规划,spfa判负环
- Android app 内存分配
- pthread_cond_broadcast与pthread_cond_signal使用区别
- 图解之TCP三次握手与四次挥手