JDK 1.8源码阅读 LinkList
一,前言
LinkedList是一个实现了List接口和Deque接口的双端链表。有关索引的操作可能从链表头开始遍历到链表尾部,也可能从尾部遍历到链表头部,这取决于看索引更靠近哪一端。 LinkedList不是线程安全的。
二,LinkList结构
LinkList内部是一个双向列表的结构,如下图所示。

三,LinkList源码阅读
3.1 LinkList的继承关系

从继承关系可以看出,LinkedList不但继承了List接口同时也继承了Queue接口。
3.2 LinkedList的构造方法
public LinkedList() {} // 空参构造
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
} // 带参构造,传入一个集合对象
3.3 LinkedList的常用方法
public E getFirst() {} // 获取第一个元素
public E getLast() {} // 获取最后一个节点元素
public E removeFirst() {} // 删除最开始节点元素,并将改元素返回
public E removeLast() {} // 删除最后节点元素,并将改元素返回
public void addFirst(E e) {} // 最前面添加节点元素
public void addLast(E e) {} //添加最后节点元素
public boolean contains(Object o) {} // 判断元素是否存在
public int size() {} // 返回集合长度
public boolean add(E e) {} // 最末尾添加
public boolean remove(Object o) {} // 最末尾删除
public boolean addAll(Collection<? extends E> c) {} // 将一个集合添加到Linkedlist
public boolean addAll(int index, Collection<? extends E> c) {} // 指定索引位置后开始添加集合
public void clear() {} // 清空
// Positional Access Operations
public E get(int index) {} // 更具索引获取数据
public E set(int index, E element) {} // 将指定位置的数字进行替换
public void add(int index, E element) {} // 指定索引添加
public E remove(int index) {} // 删除指定索引位置数据
// Search Operations
public int indexOf(Object o) {} // 返回指定元素的索引
public int lastIndexOf(Object o) {} // 最后一次出现该元素的索引
// Queue operations. 队列方式,增删更快
public E peek() {} // 返回第一个,该方法笔者测试了感觉没什么用,可能没有理解深刻。
public E element() {} // 返回第一个元素
public E poll() {} // 返回和删除第一个元素
public E remove() {} // 返回和删除第一个元素
public boolean offer(E e) {} // 最后面添加元素
public boolean offerFirst(E e) {} // 开始添加元素
public boolean offerLast(E e) {} // 最后添加元素
public E peekFirst() {} // 返回第一个
public E peekLast() {} // 返回最后一个
public E pollFirst() {} // 返回和删除第一个元素
public E pollLast() {} // 返回和删除最后元素
public void push(E e) {} // 前面添加
public E pop() {} // 删除并返回第一个
public boolean removeFirstOccurrence(Object o) {} // 删除第一个
public boolean removeLastOccurrence(Object o) {} // 删除最后一个
public ListIterator<E> listIterator(int index) {}
/**
* @since 1.6
*/
public Iterator<E> descendingIterator() {} // 转换迭代对象
public Object clone() {} // 复制一个
public Object[] toArray() {} // 转化成数组
@SuppressWarnings("unchecked")
public <T> T[] toArray(T[] a) {}
/**
* @since 1.8
*/
@Override
public Spliterator<E> spliterator() {}
从方法中发现,有很多相同功能的方法,但是在效率上会有一定的差别。用队列的方式进行添加效率更高。
四,总结
LinkedList是基于双端链表的List,其内部的实现源于对链表的操作,所以适用于频繁增加、删除的情况;该类不是线程安全的;另外,由于LinkedList实现了Queue接口,所以LinkedList不止有队列的接口,还有栈的接口,可以使用LinkedList作为队列和栈的实现。
JDK 1.8源码阅读 LinkList的更多相关文章
- JDK 1.8 源码阅读和理解
根据 一篇文章教会你,如何做到招聘要求中的“要有扎实的Java基础” 的指引,决定开始阅读下JDK源码. 本文将作为源码阅读总纲 一.精读部分 java.io java.lang java.util ...
- JDK 1.8源码阅读 TreeMap
一,前言 TreeMap:基于红黑树实现的,TreeMap是有序的. 二,TreeMap结构 2.1 红黑树结构 红黑树又称红-黑二叉树,它首先是一颗二叉树,它具体二叉树所有的特性.同时红黑树更是一颗 ...
- JDK 1.8源码阅读 HashMap
一,前言 HashMap实现了Map的接口,而Map的类型是成对出现的.每个元素由键与值两部分组成,通过键可以找对所对应的值.Map中的集合不能包含重复的键,值可以重复:每个键只能对应一个值. 存储数 ...
- JDK 1.8源码阅读 HashSet
一,前言 类实现Set接口,由哈希表支持(实际上是一个 HashMap集合).HashSet集合不能保证的迭代顺序与元素存储顺序相同.HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依 ...
- JDK 1.8源码阅读 ArrayList
一,前言 ArrayList是Java开发中使用比较频繁的一个类,通过对源码的解读,可以了解ArrayList的内部结构以及实现方法,清楚它的优缺点,以便我们在编程时灵活运用. 二,ArrayList ...
- jdk源码阅读笔记-LinkedHashMap
Map是Java collection framework 中重要的组成部分,特别是HashMap是在我们在日常的开发的过程中使用的最多的一个集合.但是遗憾的是,存放在HashMap中元素都是无序的, ...
- jdk源码阅读笔记-HashSet
通过阅读源码发现,HashSet底层的实现源码其实就是调用HashMap的方法实现的,所以如果你阅读过HashMap或对HashMap比较熟悉的话,那么阅读HashSet就很轻松,也很容易理解了.我之 ...
- JDK部分源码阅读与理解
本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/article/2016/05/31/JDK部分源码阅读与理解/ 不喜欢重复造轮子,不喜欢贴各种东西.JDK ...
- JDK源码阅读(三):ArraryList源码解析
今天来看一下ArrayList的源码 目录 介绍 继承结构 属性 构造方法 add方法 remove方法 修改方法 获取元素 size()方法 isEmpty方法 clear方法 循环数组 1.介绍 ...
随机推荐
- [HBase Manual] CH2 Getting Started
Getting Started Getting Started 1. Introduction 2.Quick Start-Strandalone HBase 2.1 JDK版本选择 2.2 Get ...
- 解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) ";
解决方案: https://blog.csdn.net/HeatDeath/article/details/79065872 https://blog.csdn.net/hjf161105/artic ...
- win10 安装node.js node.js 安装成功但npm -v 报错问题解决
错误症状官网下载node-v8 .node-v10 的msi 安装进行安装. npm -v 错误如下 0 info it worked if it ends with ok 1 verbose cli ...
- Python学习小组微信群公告页面
<简明 Python 教程>读经群,PDF地址:https://pan.baidu.com/s/1FK8s4cTfwWxSktOfS95ArQ,PyCharm-Edu地址:https:// ...
- SpringMVC+ Mybatis 配置多数据源 + 自动数据源切换 + 实现数据库读写分离
现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询.因为在实际的应 ...
- maven报 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile(defalut-compile) on project 项目名称:No such compile 'javac'
这个问题纠结了一天,在另外一个电脑是正常的,但是从服务器下载下来到另外一个电脑的时候却出现了如下图问题 看到javac大家都会想到是编译出现问题,而本地的配置如下图所示: 看着配置都是一致的,会是哪里 ...
- MySQL 全文检索 ngram Mybatis
创建全文索引(FullText index) 创建表的同时创建全文索引 FULLTEXT (name) WITH PARSER ngram 通过 alter table 的方式来添加 alter ta ...
- [Ubuntu] Git可视化比较工具 P4Merge 的安装/配置及使用
1 下载 下载地址. 链接到上面的下载页后,先找到左边导航的 Clients ,如下图 1 所示. 接着找到 P4Merge: Visual Merge Tool , 如下图 2 所示. 最后,选择好 ...
- CF 1131C Birthday
C. Birthday time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- python文档自动翻译
关键方法 提取文档内容 读取TXT文档 txt文档的读取很简单,直接用python自带的open()方法就好,代码如下所示: # 读取TXT文档 def read_txt(path): '''实现TX ...