List接口

1、体系:

2、ArrayListVector底层都是用数组实现,唯一区别是Vector是一种线程安全的实现。

 

3、LinkedList底层使用双向循环链表实现,无论LinkedList是否为空,链表内都有一个header节点,header的后驱节点是链表第一个元素,前驱节点是链表的最后一个元素。

 

4、ArrayList内部的数组初始化大小为10,每次扩容会将新数组大小设置为原来的1.5倍。在能有效评估ArrayList数组大小初始值的情况下,指定容量大小能对其性能有较大的提升。

 

5、LinkedList由于使用了链表的结构,因此不需要维护容量的大小。但是每次元素新增都需要创建一个Entry对象,并进行更多的赋值操作,会比较占用内存空间,对堆内存和GC的要求比较高。

 

6、List的遍历通常有3种方式:ForEach操作、迭代器for循环

 

7、集合遍历代码优化方案:

(1)分离循环中被重复调用的代码。

//优化前代码
for (int i = 0;i < collection.size();i++) {
    ...
}

//优化后代码:
int size = collection.size();
for (int i = 0;i < size;i++) {
    ...
}

 (2)减少函数的调用,函数调用是消耗系统堆栈资源的,直接访问元素会更高效。

 

8、RandomAccess接口是用来标记哪些是支持快速随机访问的List实现,如果list instanceof RandomAccess,则遍历方式使用随机访问,否则使用迭代器方式进行访问。

posted on 2019-09-07 14:05  逍遥1989  阅读(152)  评论(0编辑  收藏  举报