关于LinkedList for OpenJDK

概述

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

3)逐个追加元素   4)addAll函数源码 关于LinkedList for OpenJDK  关于LinkedList for OpenJDK

 

 

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

 

 

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

 

 

  总结:      1)插入,代替,删除操作耗时少      2)查找操作耗时比较多              
上一篇:如何下载JDK


下一篇:再见,Java 8!Java 17 终于免费了,史上最快的 JDK。。