注:玩的是JDK1.7版本
一: 先上类图,从类图上看和 ArrayList.java 非常相像,可查看 分析*(一)-ArrayList.java
二:然后看源码,发现和 ArrayList.java 各种实现上也非常的相像,他们的底层数据结构都是数组,并且都可以动态扩展,所以,不再重述了,有兴趣可以查看 分析*(一)-ArrayList.java
/**
* The array buffer into which the components of the vector are
* stored. The capacity of the vector is the length of this array buffer,
* and is at least large enough to contain all the vector's elements.
*
* <p>Any array elements following the last element in the Vector are null.
*
* @serial
*/
protected Object[] elementData;
三:如此类似的类为什么需要两个呢?写JDK源码的人怎么可能犯这个错误,来看看他们的不同点吧!
1)当需要扩展空间时,ArrayList.java 增加原来的一半 Vector.java 增加原来的一倍
2)ArrayList.java 非线程安全 Vector.java 是线程安全
Vector.java 类的许多方法都使用了 synchronized 同步关键字来修饰了,代表 Vector.java 是一个线程安全的类!当然,对应的代价嘛!就是开销相对会大一些。加锁后为什么开销会大一些呢?
想像一下,你在北京*附近有一座四合院,大门、小门、卧室门你都上锁了,你晚上写完代码,下班后到家休息的时候,是不是要一个个获得锁,然后一个个的开锁,才能进门休息,是不是有点费事费时呢?