概述

     LinkedList采用底层采用双向链表结构,与ArrayList的数组结构不一样。LinkedList因数据结构不一样,不需要申请连续内存,可以利用碎片内存。元素保存数据内容外还需要存储上下游的引用,形成数据链。LinkedList是非线程安全的。
 
类图
 

size变量
    与ArrayList的size变量一样,size在此意思元素数量。
 
first变量
     存储第一个元素引用
 
last变量
     存储最后一个元素引用
 
Node节点类
     LinkedList中实现一个内部类Node,实例对象存储在item中并且保存上下游引用。item变量引用被存储元素实例,next变量引用下一个节点,prev引用上一个节点。见下源码:
 

private修饰说明Node只在LinkedList内部使用
static修饰,因为要static关键字不知道有什么用。
 
添加元素
add函数其实很简单,调用linkLast函数,未异常返回boolean类型true. 
 

linkLast函数实现新增元素追加到元素链最后,并且建立链路关系。size变量累加。
第一种场景:e是第一个元素,last变量为null, newNode变量引用赋给first,last变量引用newNode。
第二种场景:LinkedList的first已存储引用,即e元素非第一个元素。l实例的next变量引用newNode,newNode赋值给last成为最后一个元素。newNode的next变量为null.
 

 
批量添加元素
1)checkPositionIndex检查index不能大于size-1
 
2)传递index变量给node函数获取相应位置的Node实例。见下面源码:
index<(size>>1)当成if条件,这里使用一次二分查找方式来快速查找Node实现,LinkedList元素链长的时间特别有用。接下来是一个从头开始查找,另一个从尾开始查找。
 

3)逐个追加元素
 
4)addAll函数源码
 

 
指定索引位置代替元素
使用set函数实现插入元素。使用checkElementIndex检查index,然后使用node函数获取对应index位置Node实例,最后element赋值给item变量。
 

删除指定索引元素的remove函数
1)使用checkElementIndex检查index,node函数获取index对应位置的Node实例,
2)unlink函数删除链路关系。
 
指定index索引获取元素
1)checkElementIndex检查索引
2)node函数通过index获取Node实例,返回node.item元素。
 

 
总结:
     1)插入,代替,删除操作耗时少
     2)查找操作耗时比较多
 
 
 
 
 
 
 

关于LinkedList for OpenJDK的更多相关文章

  1. OpenJDK 源码阅读之 LinkedList

    概要 类继承关系 java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java ...

  2. Java集合系列:-----------06List的总结(LinkedList,ArrayList等使用场景和性能分析)

    现在,我们再回头看看总结一下List.内容包括:第1部分 List概括第2部分 List使用场景第3部分 LinkedList和ArrayList性能差异分析第4部分 Vector和ArrayList ...

  3. Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)

    概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack). Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Ja ...

  4. Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  5. JAVA LinkedList和ArrayList的使用及性能分析

    第1部分 List概括List的框架图List 是一个接口,它继承于Collection的接口.它代表着有序的队列.AbstractList 是一个抽象类,它继承于AbstractCollection ...

  6. [Java]ArrayList、LinkedList、Vector、Stack的比较

    一.介绍 先回顾一下List的框架图 由图中的继承关系,可以知道,ArrayList.LinkedList.Vector.Stack都是List的四个实现类. AbstractList是一个抽象类,它 ...

  7. 【转】Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)

    概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack). Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Ja ...

  8. OpenJDK源码研究笔记(三)-RandomAccess等标记接口的作用

    标识接口是没有任何方法和属性的接口. 它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情. 下面来看一个标记接口RandomAccess. public interface Rando ...

  9. OpenJDK源码研究笔记(十四):三种经典的设计方法,接口,接口-抽象类-具体实现类,接口-具体实现类

    在研究OpenJDK源码过程中,我发现常用的设计方法就是2种:接口,接口-抽象类-具体实现类 . 在一些其它开源框架和业务开发中,经常存在着第3种设计,接口-具体实现类. 1.只有接口,没有实现类. ...

随机推荐

  1. Elasticsearch 全文搜索

    1,匹配查询(match) match查询主要的应用场景是进行全文搜索: // 1,初始化数据 DELETE /my_index PUT /my_index { "settings" ...

  2. [WCF] - 使用 bat 批处理文件将 WCF 服务部署为 Windows Service

    1. 添加 Windows Service 项目 2. 添加 WCF 项目引用 3. 更新 App.config 配置文件(可以从 WCF的 Web.config 拷贝过来),设置服务地址. 4. 配 ...

  3. C++ 根据两点式方法求直线并求两条直线的交点

    Line.h #pragma once //Microsoft Visual Studio 2015 Enterprise //根据两点式方法求直线,并求两条直线的交点 #include"B ...

  4. Spyder中代码提示功能添加

    问题描述:Spyder中编写python程序时,无函数智能提示.如想要输入np.reshape,无reshape提示 预期目标:输入 np.  然后智能提示reshape 解决方法: 第一步:进入本地 ...

  5. php中比较复杂但又常用的字符串函数

    php系统核心库自带的函数中,字符串比数组函数较为简单,但还是有一些较为复杂但又很常用的函数,比如下面的这些函数 explode()函数 用一个字符串来分割另一个字符串,返回结果是一个数组 explo ...

  6. Git Gui、Ssh key的使用和ideaui配置使用Git解决冲突(下)

    目的: 1.Git Gui的使用 2.Ssh key 介绍及使用 2.1小结:https 和 SSH 的区别 3.Idea配置使用并使用git 4.ideaui使用Git冲突问题解决 Git Gui的 ...

  7. 网页调试js时,如何知道某个事件对应哪段js代码?

    有时候我们需要知道某个事件对应的js代码,比如点击一个div元素时,出现下拉框,我想知道这个功能对应的js代码,那就可以按下图操作: 勾选click事件,重新运行,那么就会在每个click事件那里设置 ...

  8. Java帖子

    IDEA新手使用教程(详解):https://cloud.tencent.com/developer/article/1448115 Java学习文档:https://www.sxt.cn/Java_ ...

  9. VUE 元素拖拽、移动

    元素拖拽 作者:一粒尘土 时间:2019-10-30 使用范围:两个元素位置交换,移动元素到指定位置 涉及函数 属性 解释 draggable 是否允许元素进行拖拽 dragstart 拖拽开始触发的 ...

  10. EntityFramework进阶(四)- 实现批量新增

    本系列原创博客代码已在EntityFramework6.0.0测试通过,转载请标明出处 我们可以结合Ado.Net的SqlBulkCopy实现SqlServer数据库的批量新增,其他类型的数据库的批量 ...