List接口分析
常用方法
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
for循环添加1-10到数组中,执行add方法,首先确认容量是否足够,是否需要扩容?
此时使用默认capacity构造器,创建的elementData为空数组,第一次扩容,会默认扩容到10,第二次之后检测要求的最小容量mincapacity是否大于实际容量elementData。若大于,则执行扩容grow方法,把数组elemenData扩容到原来的1.5倍,再用Arrays.copyof()方法保证原数据不丢失
使用指定大小的构造器,创建的elemenData就是指定大小,第一次扩容按1.5倍扩容,后续机制相同。
---------------------------------
Vector类和ArrayList一样,只是Vector线程安全(同步)
LinkedList仍然是List接口的实现子类,可以添加任意元素,元素可以重复,可以添加null,线程不安全。
LinkedList底层实现了双向链表和双端队列
item存放数据,在首尾结点还存有first和last属性,对链表的删改效率极高,只需修改指向即可。
底层源码剖析
常用方法
linkedList.add();
LinkedList也可以使用普通for,迭代器和增强for遍历集合
在实际开发中应该如何选择集合?