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,则遍历方式使用随机访问,否则使用迭代器方式进行访问。

转载于:https://www.cnblogs.com/xy80hou/p/11480515.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值