List详解

一、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倍。

你可能感兴趣的:(集合,链表,数据结构)