LinkedList源码分析笔记(jdk1.8)

时间:2022-01-03 00:55:42

1.特点

  LinkedList的底层实现是由一个双向链表实现的,可以从两端作为头节点遍历链表。

  允许元素为null

  线程不安全

  增删相对ArrayList快,改查相对ArrayList慢(curd都会根据index找到Node,折半查找来提高效率)

  底层链表实现,没有扩容一说

2.链表节点

  静态内部类

    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;
}
}

3.方法

  add和remove系列的方法,涉及到节点指向的问题,因为是双向链表,所以除了确定元素之外,还需要重置前置节点和后置节点

    1.前置节点和后置节点为null是分别判断

    2.remove,元素的前置节点的next指向当前元素的next;当前元素的后置节点的prev指向当前元素的的prev;置空当前元素一节当前元素的节点指向,等待gc

    3.add默认尾部追加

    4.addAll中定义的中间节点变量,和插入位置的后一个节点 Node<E> pred, succ; ,在for循环中使用 pred = newNode; 步进指向插入的最后一个元素,modCount++;

  get和set方法,都要先获取节点(通过位移运算折半查找,提升查询效率)

     Node<E> node(int index)

  ArrayList和LinkedList都有一个内部类ListItr,实现了ListIterator接口

    可以使用listIterator进行迭代循环

  LinkedList比较简单主要是数据结构双向列表的指向问题,画图很好理解

LinkedList源码分析笔记(jdk1.8)的更多相关文章

  1. LinkedList源码分析(jdk1&period;8)

    LinkedList概述 ​ LinkedList 是 Java 集合框架中一个重要的实现,我们先简述一下LinkedList的一些特点: LinkedList底层采用的双向链表结构: LinkedL ...

  2. Java入门系列之集合LinkedList源码分析(九)

    前言 上一节我们手写实现了单链表和双链表,本节我们来看看源码是如何实现的并且对比手动实现有哪些可优化的地方. LinkedList源码分析 通过上一节我们对双链表原理的讲解,同时我们对照如下图也可知道 ...

  3. zeromq源码分析笔记之线程间收发命令(2)

    在zeromq源码分析笔记之架构说到了zmq的整体架构,可以看到线程间通信包括两类,一类是用于收发命令,告知对象该调用什么方法去做什么事情,命令的结构由command_t结构体确定:另一类是socke ...

  4. ArrayList 和 LinkedList 源码分析

    List 表示的就是线性表,是具有相同特性的数据元素的有限序列.它主要有两种存储结构,顺序存储和链式存储,分别对应着 ArrayList 和 LinkedList 的实现,接下来以 jdk7 代码为例 ...

  5. Java集合之LinkedList源码分析

    概述 LinkedLIst和ArrayLIst一样, 都实现了List接口, 但其内部的数据结构不同, LinkedList是基于链表实现的(从名字也能看出来), 随机访问效率要比ArrayList差 ...

  6. java集合系列之LinkedList源码分析

    java集合系列之LinkedList源码分析 LinkedList数据结构简介 LinkedList底层是通过双端双向链表实现的,其基本数据结构如下,每一个节点类为Node对象,每个Node节点包含 ...

  7. HashMap 源码分析 基于jdk1&period;8分析

    HashMap 源码分析  基于jdk1.8分析 1:数据结构: transient Node<K,V>[] table;  //这里维护了一个 Node的数组结构: 下面看看Node的数 ...

  8. ReentrantReadWriteLock源码分析笔记

    ReentrantReadWriteLock包含两把锁,一是读锁ReadLock, 此乃共享锁, 一是写锁WriteLock, 此乃排它锁. 这两把锁都是基于AQS来实现的. 下面通过源码来看看Ree ...

  9. ArrayList源码分析笔记

    ArrayList源码分析笔记 先贴出ArrayList一些属性 public class ArrayList<E> extends AbstractList<E> imple ...

随机推荐

  1. Java Lambda表达式初探

    Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...

  2. H2嵌入式数据库的各种连接方式

    H2database是一款用java语言编写的开源数据库, 一般用作游戏的数据存储, 当然web项目也是可以用的, web项目也可以将该数据库 首先要安装H2数据库 http://www.h2data ...

  3. HBase in 2013

    2013年马上就要过去了,总结下这一年HBase在这么一年中发生的主要变化.影响最大的事件就是HBase 0.96的发布,代码结构已经按照模块化release了,而且提供了许多大家迫切需求的特点.这些 ...

  4. Android单元测试初探——Instrumentation(转载)

    学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次.这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以 ...

  5. Win7无法访问NAS或Samba服务器解决之道 转

    Win7无法访问NAS或Samba服务器解决之道 http://www.sina.com.cn  2010年05月12日 01:41  IT168.com [IT168 应用]默认情况下,Window ...

  6. Samba远程代码执行-分析&lpar;CVE-2017-7494&rpar;

    经历了前一阵windows的EternalBlue之后,某天看见了360的 samba高危预警,这个号称linux端的EternalBlue(EternalRed),于是便研究了一波 概述(抄) Sa ...

  7. 带着新人学springboot的应用10(springboot&plus;定时任务&plus;发邮件)

    接上一节,环境一样,这次来说另外两个任务,一个是定时任务,一个是发邮件. 1.定时任务 定时任务可以设置精确到秒的准确时间去自动执行方法. 我要一个程序每一秒钟说一句:java小新人最帅 于是,我就写 ...

  8. linux cp 拷贝文件或目录

    cp 拷贝文件或目录 默认不能拷贝目录 常用来备份: [root@MongoDB ~]# cp a.txt /tmp/ [root@MongoDB ~]# cp /root/a.txt /tmp/ c ...

  9. mysql语句-DDL语句

    SQL分类 1.DDL语句:数据定义语句,用来定义不同的数据段.数据库,表,列,索引等数据表对象,常用语句:create.drop.alter等. 2.DML语句:数据操作语句,用于添加.删除.更新和 ...

  10. awk使用总结

    转载自董的博客 1. 什么是awk awk是Unix/Linux提供的样式扫描与处理工具,非常擅长处理结构化数据和生成表单.与sed 和grep 很相似,但功能却超过大于两者,由于awk具备各种脚本语 ...