集合介绍(2)

List接口分析

集合介绍(2)_第1张图片

常用方法

集合介绍(2)_第2张图片

集合介绍(2)_第3张图片

List的三种遍历方式(LinkedList,Vector,ArrayList...)

iterator迭代器;

增强for;

因为List本质底层是数组存储,因此也可以使用普通for遍历;

for(int i = 0; i < list.size() ;i++){

        Object obj = list.get(i);

        System.out.println(obj);

}

----------------------------------

ArrayList注意事项分析

ArrayList arraylist = new ArrayList();可以存放任意类型数据,包括空值null,并且可以加入多个空值

ArrayList基本等同于Vector,但ArrayList线程不安全,所以执行效率更高,但多线程下不适合用ArrayList

集合介绍(2)_第4张图片

集合介绍(2)_第5张图片

for循环添加1-10到数组中,执行add方法,首先确认容量是否足够,是否需要扩容?

此时使用默认capacity构造器,创建的elementData为空数组,第一次扩容,会默认扩容到10,第二次之后检测要求的最小容量mincapacity是否大于实际容量elementData。若大于,则执行扩容grow方法,把数组elemenData扩容到原来的1.5倍,再用Arrays.copyof()方法保证原数据不丢失

使用指定大小的构造器,创建的elemenData就是指定大小,第一次扩容按1.5倍扩容,后续机制相同。

---------------------------------

Vector类和ArrayList一样,只是Vector线程安全(同步)

集合介绍(2)_第6张图片

LinkedList仍然是List接口的实现子类,可以添加任意元素,元素可以重复,可以添加null,线程不安全。

LinkedList底层实现了双向链表和双端队列

集合介绍(2)_第7张图片

item存放数据,在首尾结点还存有first和last属性,对链表的删改效率极高,只需修改指向即可。

集合介绍(2)_第8张图片

底层源码剖析

集合介绍(2)_第9张图片

集合介绍(2)_第10张图片

常用方法

linkedList.add();

集合介绍(2)_第11张图片

LinkedList也可以使用普通for,迭代器和增强for遍历集合

在实际开发中应该如何选择集合?

集合介绍(2)_第12张图片

你可能感兴趣的:(java)