深入理解LinkedList

LinkedList是非线程安全双向链表式集合

优点:所以它的插入和删除操作比 ArrayList 更加高效。

缺点:但也是由于其为基于链表的,所以随机访问的效率要比 ArrayList 差。


通过上图可以看出LinkedList是可clone,可被序列化的双向链表集合.

LinkedList实现双向链表是根据自己内部类,通过这个类可以实现双向链表结构


对集合我们操作无外乎添加,删除,获取,清空(GC),我们接下来就根据源码来看下经常使用的实现方式

add(E e):


添加原理:当第一次添加的时候last以及first都为null,那么这时候添加第一个的时候只有创建的第一个链表last就形成了<null,e,null>,在第二次的时候l.next就开始记录下一个(last = newNode;),并且对上一个的next记录为当前的数据(l.next = newNode;);这样就形成了一个循环.


获取原理:首先是先检测索引值是否超出size,其次就是从链表中取得了,取得的时候是要判断是从链表前→后,还是后→前取,这个是根据index和size/2相比较,哪边比较少就证明从这边取得的速度比较快.

但是这个快也是相对而言,不像arrayList数组根据索引直接取得来的快,如果数据量很大的情况下,那么不管从前往后取还是从后往前取,都是要遍历最多size/2次的,所以说linkedList访问效率比较差.

remove(int index)


删除原理:首先根据index取得该Node,然后将Node的next对应的prev设置为Node的prev对应的next.(prev.next = next;),并且还判断了是否remove的是第一个还是最后一个

clear()


将所有节点都设置为null,这样有助于GC垃圾清理.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值