LinkedList内部实现原理
2024-10-21 12:50:01
LinkedList内部实现原理
java
list
同ArrayList内部原理一样
我们先创建一个LinkedList对象LinkedList<String> li = new LinkedList<>();
,然后查看其构造方法
transient Node<E> first;
transient Node<E> last;
public LinkedList() {
}
比较尴尬的是在它的构造方法中什么也没有写。LinkedList
的结构是**双向链表结构**,链表结构数据是存储在节点中的,我们正好看到两个Node
节点属性,一个叫first
代表链表中第一个节点,另一个叫last
代表链表中最后一个节点。
查看一下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;
}
这是一个内部类,标准的双向链表的数据结构Node<E> prev
前驱指向该节点的前一个节点,Node<E> next;
后继指向该节点的后一个节点,E item;
元素用于存放数据。
当我们执行add()
方法向LinkedList
中添加数据的时候,调用以下方法
public boolean add(E e) {
linkLast(e);
return true;
}
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++;
}
我们发现它将last
(最后一个节点)给了l
节点,然后new
了一个新的节点初始化新节点的前驱为l
节点,后继为null
,元素为我们要存放的对象。然后设置newNode
为last
节点,如果节点l
为null
则设置newNode
为first
节点,否则使l
的next
指向新的节点 l.next = newNode
。
FirstLastNode
内部原理
最新文章
- 【JSOI2007】麻将 bzoj 1028
- MyEclipse设置像visual studio一样的智能提示
- 不经意间网易开源镜像去掉了FreeBSD的镜像
- scala函数定义的四种方式
- 技术贴 本地代码与svn关联教程 svn upgrade问题解决
- cocos2d-x简单动画
- 10.29 morning
- Round Numbers (排列组合)
- spring 配置文件 引入外部的property文件的两种方法
- python自学笔记(七)排序与多级排序
- 老男孩Python全栈学习 S9 日常作业 005
- JSP概述
- LostRoutes项目日志——编辑project.json
- Hive分区表新增字段及修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作
- linux服务器的所有服务web/dns/dhcp/vsftp-nfs-samba的配置
- vuex里mapState,mapGetters使用详解
- unity中手机触摸代码
- Java第07次实验提纲(异常)
- (最优m个候选人 和他们的编号)Jury Compromise (POJ 1015) 难
- mysql Substr与char_length函数的应用
热门文章
- pandas中loc和iloc的使用细节
- 解决PC 拖动浏览器或者应用时CPU占用过高问题
- 10-排序6 Sort with Swap(0, i) (25point(s))
- Apache Dubbo 官方正式发布 Spring 6 &; Spring Boot 3 支持
- error: expected ‘)’ before ‘PRIx64’
- go的grpc环境源码编译安装
- DNS欺骗
- IT编程相关内容汇总 - 进阶者系列 - 学习者系列文章
- DVWA靶场——靶场搭建
- Go+beego接入OSS上传