本文主要讲解集合类中Collection的子接口之一List接口的实现类:ArrayList和Vector的联系与区别。如有错误,欢迎指出。感谢!
相同点
- 都实现了List接口,存储有序的、可重复的元素;
- 二者底层都是使用Object[] elementData 数组来存储;
不同点
-
ArrayList是作为List接口的主要实现类,其实也就是说如果没有什么特殊需求,需要用一个有序的、可重复的结构代替数组,那就new一个ArrayList就可以了;Vector是List接口的古老实现类,在JDK1.0时候就推出了;
-
ArrayList是线程不安全的,执行效率高;而Vector底层源码里面是很多synchronized同步方法的,是线程安全的,相对效率就低;
-
在扩容方面,ArrayList和Vector默认初始化容量都是10。不过展开来说的话,ArrayList在JDK7时候,底层数组初始化长度为10,当添加元素导致数组容量不够时进行扩容,扩容为原来的1.5倍,同时需要将原来数组中的元素复制到新数组中;而在JDK8时候改成在添加元素时才创建长度为10的数组,其他与JDK7无差;
然后Vector在JDK7和8时都默认扩容为原来数组的2倍。