一、List的实现类有三个:ArrayList、LinkedList、Vector
二、三者的相同点:
1、都是List的实现类
2、都是有序的,并且可重复的
三、三者的不同点:
1、ArrayList底层是Object[] dataElement数组,它是线程不安全的
2、LinkedList底层是双向链表,它是线程不安全的
3、Vector底层也是Object[] dataElement数组,它是线程安全的,是List最古老的实现类,使用最少
四、ArrayList源码分析
JDK7情况下:
List list=new ArrayList() 时,底层创建了长度是10的Object[] 数组;
当调用list.add()方法时,如果长度不够,创建一个新的数组,长度为原来的1.5倍,然后将原数组中的值复制过来。
建议:如果知道list的长度时,可以直接在创建时传入长度,List list=new ArrayList(50),避免了扩容这个过程,提高效率
JDK8情况下:
List list=new ArrayList()时,底层默认时一个{};
当调用list.add()时,才创建长度是10的Object[]数组;
其他的操作于JDK7一样
五、LinkedList源码分析
底层是双向链表,操作它的原理就是操作双向链表
六、Vector源码分析
Vector vector=new Vector() 时,底层创建了长度是10的Object[] 数组;
它的扩容是每次扩大为原来的2倍。