LinkedList源码分析(一)

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈
LinkedList源码分析(一)解读总结
正菜来了⛳⛳⛳
🎈LinkedList类的实现
针对类:LinkedList是实现的AbstractSequentialList抽象类
针对接口:LinkedList实现的是List,Deque等接口。
🎈LinkedList成员变量
🍮transient int size = 0
含义: 这个代表的是LinkedList中元素的个数,用transient 修饰表示size这个变量不能被序列化。
🍮transient Node<E> first;
含义: Pointer to first node. Invariant,这个表示first为一个不变量,指向链表中的第一个节点。
🍮 transient Node<E> last;
含义: Pointer to lastnode. Invariant,这个表示last为一个不变量,指向链表中的最后的一个节点。
🍮 LinkedList()
含义: 这个表示的是无参构造函数。
public LinkedList() {
}
🍮LinkedList(Collection<? extends E> c)
含义: 这个表示的是有参构造函数,并且把集合c中的元素添加到linkedlist中去。
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
从上边的方法中可以看出来是调用了addAll©这个函数,我们接着看。
🍮linkFirst(E e)
含义:这个函数表示的是把e作为linkedlist的第一个元素。
private void linkFirst(E e) {
final Node<E> f = first;
final Node<E> newNode = new Node<>(null, e, f);
first = newNode;
if (f == null)
last = newNode;
else
f.prev = newNode;
size++;
modCount++;
}
从上述函数中可以看出,会先创建一个Node节点存储e元素,然后判断list是不是空的,如果是空的,把last指向新创建的节点,不为空的话,把原来first的节点的前驱节点指向新创建的第一个节点。
🍮linkLast(E e)
含义:这个函数表示的是把e作为linkedlist的最后一个元素。
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
从上述函数中可以看出,会先创建一个Node节点存储e元素,然后判断list是不是空的,如果是空的,把first指向新创建的节点,不为空的话,把原来last的节点的后驱节点指向新创建的第一个节点。
🍚总结
以上是关于LinkedList源码变量和部分函数的总结,希望有所帮助。
- 点赞
- 收藏
- 关注作者
评论(0)