Java源码阅读笔记(2)-LinkedList
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java源码阅读笔记(2)-LinkedList,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2688字,纯文字阅读大概需要4分钟。
内容图文
![Java源码阅读笔记(2)-LinkedList](/upload/InfoBanner/zyjiaocheng/643/0dca6dbdd8474f80ab00649e1744b008.jpg)
首先我们来看下初始化
/**
* Constructs an empty list.
*/
public LinkedList() {
}
/**
* Constructs a list containing the elements of the specified
* collection, in the order they are returned by the collection's
* iterator.
*
* @param c the collection whose elements are to be placed into this list
* @throws NullPointerException if the specified collection is null
*/
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
没什么好说的,当传入一个list的时候也能生成一个LinkedList这样的链表。
Node的构成
private static class Node<E> {
E item;
//下一个节点
Node<E> next;
//上一个节点
Node<E> prev;
//构造函数
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
连接
在许多连接函数中,我们从最简单的尾部连接讨论起,连接比如说
1->2->3->4->5->6
我要加个7,
那我先把6这个节点存储起来’
再新建个节点7,7的前置节点得是6,无后直接点
当7要做尾部的时候,那么设置的last也一定要改成7那个节点咯,
再将存储的这个6节点的next设成7,这就关联起来了。
再看看头部节点的连接,
当我们要在头部新增个节点的时候,
我们先将1这个节点存储起来,
然后初始化一个比如说8这个节点吧,这个节点的next节点得是1
我们再把8这个节点更新到first上面去,
再用存好的1节点的prev指向到8这个节点。这就完成了头部插入的操作。
尾部连接
/**
* Links e as last element.
*/
void linkLast(E e) {
//暂存该节点为l
final Node<E> l = last;
//新增个节点,前节点为l,元素为e,没有右节点(因为直接插入后面)
final Node<E> newNode = new Node<>(l, e, null);
//新节点赋给最后节点
last = newNode;
if (l == null)
//链表为空(无最后节点)新增节点赋给首节点
first = newNode;
else
//暂存的last节点指向新节点
l.next = newNode;
size++;
modCount++;
}
头部连接
/**
* Links e as first element.
*/
private void linkFirst(E e) {
//暂存该链表第一个节点为f
final Node<E> f = first;
//新增节点newNode,并设置f为右节点
final Node<E> newNode = new Node<>(null, e, f);
//newNode赋给first
first = newNode;
if (f == null)
last = newNode;
else
//设置暂存f的前置节点为newNode
f.prev = newNode;
size++;
modCount++;
}
尾部删除
/**
* Unlinks non-null last node l.
*/
private E unlinkLast(Node<E> l) {
// assert l == last && l != null;
//存储当前节点元素
final E element = l.item;
//prev游标转向被删除节点的前一位
final Node<E> prev = l.prev;
//释放
l.item = null;
//释放
l.prev = null; // help GC
//orev作为last节点
last = prev;
if (prev == null)
first = null;
else
//prev下节点释放
prev.next = null;
size--;
modCount++;
return element;
}
/**
* Unlinks non-null first node f.
*/
private E unlinkFirst(Node<E> f) {
// assert f == first && f != null;
final E element = f.item;
final Node<E> next = f.next;
f.item = null;
f.next = null; // help GC
first = next;
if (next == null)
last = null;
else
next.prev = null;
size--;
modCount++;
return element;
}
_CoderZxk
发布了16 篇原创文章 · 获赞 0 · 访问量 461
私信
关注
内容总结
以上是互联网集市为您收集整理的Java源码阅读笔记(2)-LinkedList全部内容,希望文章能够帮你解决Java源码阅读笔记(2)-LinkedList所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。