Collection子接口——List接口

Java中数组存储数据具有局限性,我们通常用List替代数组
1.List集合类中元素有序,且可重复(有序:按添加的顺序)
2.ArrayList、 LinkedList、Vector三种实现类

ArrayList.、LinkedList.、Vector的使用:
ArrayList的源码分析:
①jdk.7情况下:

ArrayList list=new ArrayList();//底层创建了长度为10的object[]数组

list.add (123) //elementDate(0]= new Integer (123);

...

list.add (11);// 如果此次添加导致数组容量不够,则扩容。扩容为原来的1.5倍,并将数据复制到新的数组中

//开发中建议使用带参构造器(可指定长度)

Arruy List list = new ArrayList (int capacity);

②jdk8情况下:

Array List list =new ArrayList()://底层object [] JelementDate.初始化为{};并没有创建数组。

list.add(123);//第一次调用add()时,底层才创建了长度为10的数组,并将123添加进数组中。

//后续的添加和扩容与jdk7相同

小结:idk7中的创建类似于单例的饿汉式,而jdk8中的创建类似于懒汉式。延迟了数组的创建,节省内存。

LinkedList的源码分析:(双向链表)first list  last

Linked List list=new Linked List();//内部声明了Node类型的firse和last属性,默认值为null.
list.add(123);//将123封装到Node中,创建了Node对象

Vector的源码分析
jdk7和8都创建了长度为10的数组,在扩容方面,默认扩容为原来的数组的2倍。

ArrayList::list的主要实现类,线程不安全,查询效率高。

LinkedList:对于频繁的插入、删除比ArrayList效率高。

Vector: list的古老实现类、线程安全,效率低。

 

你可能感兴趣的:(list,数据结构)