上一篇中咱们介绍了ArrayList。其实在ArrayList的源码注释中就明确的指出了ArrayList这个类大体的等于Vector除了ArrayList是不一样步的。那么如今趁热打铁,咱们开始学习一下Vector。 java
这个Vector一样也实现了RandomAccess这个标记类,同ArrayList同样,表明可以高效的实现随机访问。数组
同上篇同样,咱们也是先来看看Vector的属性 安全
能够看到,属性相比ArrayList的少了,那如今咱们来看看这几个东西是干啥的。dom
很简单,属性就上面那三个。咱们能够发现Vector的底层存储结构就是一个数组。性能
对于Vector的基本方法,不作太多介绍,其实就是对数组的操做,主要,对于数组的移位操做使用的System.arraycopy来完成,还有一个特色相比较ArrayList来讲就是他的许多方法都有一个关键字synchronized。这就是为何说Vector是同步的缘由。咱们看一下下面的图来体会一下: 学习
咱们重点说一下subList方法,同时也是对ArrayList的一个补充。spa
subList返回的List是基于这个Vector或者ArrayList的的,也就是说,对subList返回的List进行的操做的结果最后会反映到源Vector或ArrayList上的,咱们用代码来体会一下:线程
public class TestMain {
public static void main(String[] args){
System.out.println("===============ArrayList=================");
List<String> list = new ArrayList<>(Arrays.asList("1", "2", "3", "4", "5"));
List<String> subList = list.subList(0,2);
subList.add("我是subList插入的");
list.forEach(value ->System.out.print(value+" ,") );
System.out.println();
System.out.println("===============Vector==================");
Vector<String> vector = new Vector<>(Arrays.asList("1", "2", "3", "4", "5"));
List<String> subVector = vector.subList(0,2);
subVector.add("我是subVector插入的");
vector.forEach(value ->System.out.print(value+" ,"));
}
}
复制代码
运行结果以下:3d
有上一节的铺垫,咱们不作太多无用的的查看,直接看扩容的核心代码:code
这就是Vector扩容的核心代码,看到与ArrayList的大同小异,不过这里确实多了一个这个东西,
在计算新的容量的时候,看了capacityIncrement的值是否是大于0,这个就是咱们所说Vector与ArrayList扩容的不一样处了,Vector能够自定义增加系数,控制须要扩容时增加的容量大小。当没有指定时默认增加为原来的两倍,与ArrayList同样,因为数组不能动态增大,因此是使用Arrays.copyOf从新生成了一个数组。