(1)LinkedList 实现了无序、可重复的List接口,并且还实现了Deque(双端队列)和Queue(队列)接口。LinkedList 底层是基于链表结构实现的,实现了双端队列的特性(FIFO)和栈的的特性(LIFO)。
1)添加元素的方法源码分析?
具体源码分析如下:
1)创建Node的链表数据结构
2)添加元素处理Node的结构关系。
首先我们看下LinkedList的构造函数,有参的构造函数和ArrayList参数不一致,LinkedList 有参构造函数通过传递一个集合,添加到新LinkedList中。

addAll通过将参数的集合元素转换成数组(Object[] a = c.toArray())并遍历这个数组创建Node链表关系。

基于all方法我们在看下LinkedList的add方法的源码:

基于上述分析,LinkedList实现了Collection接口的方法,主要是通过双端链表进行实现,在这个基础上扩展了队列的和栈的功能。
FIFO(先进先出):将元素添加到双端队列的末尾,从双端队列的开头移除元素。(和之前研究的add方法一样)
LIFO(先进后出):元素被推入双端队列的开头并从双端队列开头弹出。

网友评论