LinkedList源码解析

环境说明: JDK 1.8

1.类图:
看一个事物先从全局了解,然后再深入细节.
在这里插入图片描述
通过LInkedList类图可以看到LinkedList实现的关键接口有: List接口,Deque接口.
允许null值,线程不安全,并发修改下,迭代器快速失败.

2.成员变量
在这里插入图片描述
关键组成:静态内部类Node
在这里插入图片描述根据Node定义中三属性可以看出Node节点标记前后元素,基于Node的LinkedList是一个双向链表.

3.构造函数
在这里插入图片描述
4.关键方法
add新增方法:
点开看到其实就是调用的 linkLast()方法在链表尾部添加元素.真是不看源码不知道,一看源码吓一跳.
在这里插入图片描述
linkLast(),尾部增加.
新增一个Node节点,同时根据边界条件是否是首次添加来维护LInkedList的first和last属性.
在这里插入图片描述
再次看到这个熟悉的静态内部类Node,Node的prev和last属性就是Node本身,正是链表的每一个节点Node,前后也是节点Node.
在这里插入图片描述
类似的还有继承自Deque的 addFirst(),addLast()方法.

remove() 删除方法
在这里插入图片描述
继承自 Deque的remove方法,默认删除头元素.
根据指定索引删除元素,实现自List接口
在这里插入图片描述
首先还是通用的条件判断,找到节点,然后删除.其中找到元素使用的查询node()方法,根据index大小从前后查询,提升了一倍的性能.
查询方法 node()
在这里插入图片描述
5.总结
:通过源码分析可以看到
1.LinkedList基于双向链表,增删快,查询慢.
2.LinkedList线程不安全,
3.LInkedList方法部分继承自List,部分继承自Deque,可以自己梳理,对整个集合方法关系组成有一个更深入的理解.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值