当前位置:网站首页>LinkedList 是如何完成添加的?
LinkedList 是如何完成添加的?
2022-08-06 08:51:00 【来自上海的这位朋友】
问题描述:
1,LinkedList 进行初始化的时候 /** * Constructs an empty list. */
public LinkedList() {
}
2,add 方法 /** * Appends the specified element to the end of this list. * * <p>This method is equivalent to {@link #addLast}. * * @param e element to be appended to this list * @return {@code true} (as specified by {@link Collection#add}) */
public boolean add(E e) {
linkLast(e);
return true;
}
3,往linkLast(e);方法下追,当前就是添加的核心方法 /** * Links e as last element. */
void linkLast(E e) {
/* * 第一次添加的时候,last 是当前定义的一个Node<E>对象变量 * //transient Node<E> last; */
final Node<E> l = last;
/* * 在我们创建一个新的Node对象的时候,Node构造方法中 * 第一个值:prev 指向上一个对象 * 第二个值:item 当前添加的元素 * 第三个值:next 指向下一个对象 */
final Node<E> newNode = new Node<>(l, e, null);
// 创建完成后 赋值给当前 last
last = newNode;
// 判断l是否等于null,可见l就是last赋值的,在第一次添加的时候
// last就是null 所以l的变量就是null
if (l == null) // 满足条件
first = newNode;// 赋值给first
else
l.next = newNode;
size++;// 索引加加
modCount++; // 修改次数加加
}
4,第一次添加结果出来就是这样的 
5,当进行第二次添加的时候
/** * Links e as last element. */
void linkLast(E e) {
/* * 第二次添加的时候,last 就是之前上一个Node对象 */
final Node<E> l = last;
/* * 在我们创建一个新的Node对象的时候,Node构造方法中 * 第一个值:prev 指向上一个对象,所以说,我们创建第二个对象时 * 当前这个prev就会指向上一个 * 第二个值:item 当前添加的元素 * 第三个值:next 指向下一个对象 */
final Node<E> newNode = new Node<>(l, e, null);
// 创建完成后 赋值给当前 last 最后一个
last = newNode;
// 判断l是否等于null,此时l等于上一个Node对象
// l不等于null
if (l == null) // 不满足条件
first = newNode;
else
// 让上一个Node的next指向当前新创建的节点
l.next = newNode;
size++;// 索引加加
modCount++; // 修改次数加加
}
6,第二次添加出来的示意图
7,由此内推,每次添加一个新的节点的时候,节点都是往后追加的,新的节点的prev会指向上一个节点,而上一个节点则会指向一个当前这个新的节点
8,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;
}
}
边栏推荐
猜你喜欢

UNIX environment advanced programming - the first chapter

bpe Chinese tokens

dalle2: hierarchical text-conditional image generation with clip

How much is a code signing certificate?

GEE(9):区域面积统计(使用connectedPixelCount和ee.Image.pixelArea())

From "prairie cattle" to "digital cattle": Mengniu's digital transformation!

【leetcode】8. 字符串转换整数 (atoi)

JMeter集合点

第十七天(续第十六天BPDU相关知识以及STP的配置)

Jetpack WorkManager 看这一篇就够了~
随机推荐
Linux - several ways to install MySQL
2022海亮SC游记
代码签名证书多少钱?
MySQL的基本操作--创建数据库及删除数据库
From "prairie cattle" to "digital cattle": Mengniu's digital transformation!
下雨小雲動畫
Hdu 2022多校训练(5) Slipper
How to limit command length to bounce shell
How much is a code signing certificate?
Native js implements mouse following to display floating box information
快速学会文件操作模块
UNIX environment advanced programming - the first chapter
Native js implements table table
Summary of the experience of project operation and maintenance work
【Log】镜像源配置以及最新可用镜像源
/var/log/messages是空的
《微信小程序-进阶篇》Lin-ui组件库源码分析-动画组件Transition(一)
Exchange comprehensive experiment (to be supplemented)
I set the global mapping table prefix in yml, but the database does not recognize it
韩流体小球加载动画