collection子接口之一: List接口
面试题:ArrayList、 LinkedList. Vector三者的异同?
同:三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据
不同:
ArrayList的源码分析:
注意看源码进行比较
- jdk7
结论:建议开发中使用带参的构造器:ArrayList list = new ArrayList(int capacity)
源码:指定容量避免扩容困扰
- jdk8
Arraylist的变化:
小结: jdk7中的ArrayList的对象的创建类似于单例的饿汉式,而jdk8中的ArrayList的对象
的创建类似于单例的懒汉式,延迟了数组的创建,节省内存。
LinkedList的源码分析:
LinkedList list = new LinkedList();内部声明了Node类型的first和last属性,默认值为null
list.add(123);//将123封装到Node中,创建了Node对象。
体现了LinkedList的双向链表的说法
Vector的源码分析:
jdk7和jdk8中通过Vector()构造器创建对象时,底层都创建了长度为10的数组。在扩容方面,默认扩容为原来的数组长度的2倍。|