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,元素为我们要存放的对象。然后设置newNodelast节点,如果节点lnull则设置newNodefirst节点,否则使lnext指向新的节点 l.next = newNode

FirstLastNode

内部原理

最新文章

  1. 【JSOI2007】麻将 bzoj 1028
  2. MyEclipse设置像visual studio一样的智能提示
  3. 不经意间网易开源镜像去掉了FreeBSD的镜像
  4. scala函数定义的四种方式
  5. 技术贴 本地代码与svn关联教程 svn upgrade问题解决
  6. cocos2d-x简单动画
  7. 10.29 morning
  8. Round Numbers (排列组合)
  9. spring 配置文件 引入外部的property文件的两种方法
  10. python自学笔记(七)排序与多级排序
  11. 老男孩Python全栈学习 S9 日常作业 005
  12. JSP概述
  13. LostRoutes项目日志——编辑project.json
  14. Hive分区表新增字段及修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作
  15. linux服务器的所有服务web/dns/dhcp/vsftp-nfs-samba的配置
  16. vuex里mapState,mapGetters使用详解
  17. unity中手机触摸代码
  18. Java第07次实验提纲(异常)
  19. (最优m个候选人 和他们的编号)Jury Compromise (POJ 1015) 难
  20. mysql Substr与char_length函数的应用

热门文章

  1. pandas中loc和iloc的使用细节
  2. 解决PC 拖动浏览器或者应用时CPU占用过高问题
  3. 10-排序6 Sort with Swap(0, i) (25point(s))
  4. Apache Dubbo 官方正式发布 Spring 6 &amp; Spring Boot 3 支持
  5. error: expected ‘)’ before ‘PRIx64’
  6. go的grpc环境源码编译安装
  7. DNS欺骗
  8. IT编程相关内容汇总 - 进阶者系列 - 学习者系列文章
  9. DVWA靶场——靶场搭建
  10. Go+beego接入OSS上传