JAVA_LinkedList添加元素源码分析(jdk17)

发布时间:2024年01月24日

目录

先看一些重要的源码:

开始分析:


底层数据结构是双链表查询慢,首尾操作是极快的,所以多了很多首尾操作的特有 Api:

addlast 和 add 一样元素默认添加到末尾,了解即可。


先看一些重要的源码:

1.首先找到 LinkedList-->Alt+7 看大纲 --> 找到内部类 Node:

可以看到这里的构造方法的参数分别是:

prev:前一个结点的地址值

element:要存入的元素

next:后一个结点的地址值

这个一定要记住,下面会用到

发现和双向链表的结构完全一样。


再来看看 LinkedList 的属性:

注意这里的 first 和 last 不能看作是前后结点,他们指的是首尾结点


开始分析:

为了不弄混,再次说明以下:

  • pre 和 next 表示前后结点地址值
  • first 和 last 表示首尾结点地址值

这两个要区别开来

假设我们使用空参创建了一个 LinkedList 集合,这时在堆内存中会创建一个集合,此时首尾结点为 null:

这时要分别添加元素"aaa" "bbb" "ccc"

1.首先会调用add 方法接收参数,

然后在方法内调用了一个 LinkLast 方法

方法体第一行:

因为此时集合内还没有元素,所以 last 为 null

--------------------------------------------------------

第二行:

然后 new 了一个结点,地址值为 0x0011,数值为"aaa",前后结点地址值都为 null

-----------------------------------------------------------

第三行:

并且把这个新结点的地址值赋值给尾结点(last),所以说现在 last 就只指向了刚刚创建的这个结点

---------------------------------------------------------

第四行进入 if:

并且让这个新结点作为首结点(first)

注意:因为此时只有一个结点,所以它既是首又是尾结点

最后形成这样的结构

最后 size++ ,长度为 1,

modCount++,集合操作次数加一

目前第一个元素添加完毕。

接着第二个

一开始代码和第一次一样,会在 add 方法中调用 LinkLast 方法,如下

第一行:

这时 Last 就不是 null 了,是刚刚那个结点的地址值 0x0011.

--------------------------------------------------------------

第二行:

然后 new 了一个结点,数值为"bbb",前结点地址值为 0x0011,后结点地址值为 null。

----------------------------------------------------------------

第三行:

并且把这个新结点的地址值赋值给尾结点(last),所以说现在 last 就只指向了刚刚创建的这个结点。

---------------------------------------------------------

第六行 else:

0x0011 的 next(下一个) 结点地址 为 0x0022

--------------------------------------------------------

最后 size++ ,长度为 2,

modCount++,集合操作次数加一

--------------------------------------------

最后形成了这样的结构:

添加第三个数据"ccc"

前面一样:在 add 方法中调用 LinkLast 方法:

第一行:

此时 last 是 0x0022

------------------------------------------------

第二行:

然后 new 了一个结点,数值为"ccc",前结点地址值为 0x0022,后结点地址值为 null。

--------------------------------------------------

第三行:

并且把这个新结点的地址值赋值给尾结点(last),所以说现在 last 就只指向了刚刚创建的这个结点。

------------------------------------------------

第六行 else:

0x0022 的 next(下一个) 结点地址 为 0x0033

---------------------------------------

最后 size++ ,长度为 3,

modCount++,集合操作次数加一

----------------------------------------------

最后形成了这样的结构:

文章来源:https://blog.csdn.net/2301_79947226/article/details/135825403
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。