内功心法 -- java.util.LinkedList<E> (1)
写在前面的话:读书破万卷,编码如有神
--------------------------------------------------------------------
下文主要对java.util.LinkedList<E>进行整体性介绍,主要内容包括:
1、 LinkedList概述
2、 LinkedList中的属性、构造方法、常用方法介绍
3、 LinkedList遍历
参考内容:
1、JDK源码(1.7)
--------------------------------------------------------------------
1、LinkedList概述
java.util.LinkedList<E>是一个什么玩意儿? 它有什么功能? 我们拿LinkedList能够做什么?
简单点说: java.util.LinkedList<E>是一个链表,它是用来存放其他Java对象的,内部是通过链表的形式实现的。
先看下面的图(简略图):

(1) java.util.LinkedList<E>是一个链表,用来存放其它java对象的,只要是java对象就可以往LinkedList里面放。
(2) java.util.LinkedList<E>内部是通过链表来实现的,它实现了所有的列表操作,并且运行插入所有元素(包括null)。
(3) java.util.LinkedList<E>可以用作 堆栈、队列、双端队列、单向链表、双向链表。
java.util.LinkedList<E>的定义如下:
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable{ //fields //constructor //methods //inner class 'ListItr'、'DescendingIterator' //inner class 'Node'
}
从LinkedList类的定义中可以看到,它好复杂哟,定义了那么多的东西,又有父类,又实现了接口等等,这都要怪它的'祖宗',定义了那么多的规范、规则。(@_@)
好了,不多废话,撸起袖子继续干:
下面来看看一副图:

--------------------------------------------------------------------
2、 LinkedList中的属性、构造方法、常用方法介绍
2、1 java.util.LinkedList<E>中的常见属性
//双端队列中节点个数
transient int size = 0; //始终指向双端队列中第一个节点
transient Node<E> first; //始终指向双端队列中最后一个节点
transient Node<E> last; //序列号
private static final long serialVersionUID = 876323262645176354L; //fast-fail失败机制
protected transient int modCount = 0;
2、2 java.util.LinkedList<E>中链表节点数据类型
/*
描述双端队列中节点数据类型
*/
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;
}
}
2、3 java.util.LinkedList<E>中构成方法
第一种: 默认构造方法(无参数构造方法)
public LinkedList()
第二种: 带初始化子列表参数的构造方法
public LinkedList(Collection<? extends E> c)
2、4 java.util.LinkedList<E>中常用方法
| 队头、尾操作 | E getFirst() | 获取,但不移除此双端队列的第一个元素 |
| E getLast() | 获取,但不移除此双端队列的最后一个元素 | |
| E removeFirst() | 获取并移除此双端队列第一个元素 | |
| E removeLast() | 获取并移除此双端队列的最后一个元素 | |
| void addFirst(E e) | 将指定元素插入此双端队列的开头 | |
| void addLast(E e) | 将指定元素插入此双端队列的末尾 | |
| 修改操作 | boolean add(E e) |
将指定元素插入此双端队列的尾部 |
| boolean remove(Object o) | 移除此双端队列中的元素o | |
| boolean addAll(Collection<? extends E> c) | 将子集合c中的全部插入到此双端队列的尾部 | |
| boolean addAll(int index, Collection<? extends E> c) | 将子集合c中的全部插入到此双端队列的index开始位置 | |
| void clear() | 将此双端队列中的元素节点全部清空 | |
| 位置访问操作 | E get(int index) | 返回此双端队列中index位置上的节点 |
| E set(int index, E element) | 将此双端队列中index位置上的节点替换为element节点,并返回被替换的节点 | |
| void add(int index, E element) | 将元素element添加到双端队列的index位置上 | |
| E remove(int index) | 将此双端队列的index位置上的元素删除 | |
| 查询操作 | int indexOf(Object o) | 查询元素o在此双端队列中的位置(如果不存在则返回-1) |
| lastIndexOf(Object o) | 查询元素o在此双端队列中最后一次出现的位置(如果不存在则返回-1) | |
| boolean contains(Object o) | 查询此双端队列中是否有元素o | |
| int size() | 返回此双端队列的元素数 | |
| 队列操作 | E peek() | 获取,但不移除此双端队列所表示的队列的头部;如果此双端队列为空,则返回 null |
| E element() | 获取,但不移除此双端队列所表示的队列的头部 | |
| E poll() | 获取并移除此双端队列所表示的队列的头部;如果此双端队列为空,则返回 null | |
| E remove() | 获取并移除此双端队列所表示的队列的头部 | |
| boolean offer(E e) |
将指定元素插入此双端队列所表示的队列,如果成功,则返回 true,如果当前没有可用的空间,则返回 false |
|
| 双端队列操作 | boolean offerFirst(E e) | 将指定的元素插入此双端队列的开头 |
| boolean offerLast(E e) | 将指定的元素插入此双端队列的末尾 | |
| E peekFirst() | 获取,但不移除此双端队列的第一个元素;如果此双端队列为空,则返回 null | |
| E peekLast() | 获取,但不移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null | |
| E pollFirst() | 获取并移除此双端队列的第一个元素;如果此双端队列为空,则返回 null | |
| E pollLast() | 获取并移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null | |
| void push(E e) |
将一个元素推入此双端队列所表示的堆栈;如果成功,则返回 true,如果当前没有可用空间,则抛出 IllegalStateException |
|
| E pop() | 从此双端队列所表示的堆栈中弹出一个元素 | |
| boolean removeFirstOccurrence(Object o) | 从此双端队列移除第一次出现的指定元素 | |
| boolean removeLastOccurrence(Object o) | 从此双端队列移除最后一次出现的指定元素 | |
| Iterator操作 | ListIterator<E> listIterator(int index) | 返回此双端队列的ListIterator对象 |
| Iterator<E> descendingIterator() | 返回以逆向顺序在此双端队列的元素上进行迭代的迭代器 | |
| 数组和克隆操作 | Object clone() | 返回一个此双端队列的浅复制 |
| Object[] toArray() | 把此双端队列中的元素以数组的形式返回 | |
| T[] toArray(T[] a) | 把此双端队列中的元素以数组的形式返回 |
--------------------------------------------------------------------
java.util.LinkedList<E>系列文章
java.util.LinkedList<E>(1) java.util.LinkedList<E>(2) java.util.LinkedList<E>(3)
java.util.LinkedList<E>(4) java.util.LinkedList<E>(5) java.util.LinkedList<E>(6)
java.util.LinkedList<E>(7) java.util.LinkedList<E>(8)
--------------------------------------------------------------------
相关知识
java.util.Collection<E> java.util.AbstractCollection<E> java.util.List<E>
java.util.AbstractList<E> java.util.Iterator<E> java.util.ListIterator<E>
Java中的标记接口 迭代器模式 Java中的深拷贝和浅拷贝 java.util.Arrays
java.util.Queue<E> java.util.Deque<E>
内功心法 -- java.util.LinkedList<E> (1)的更多相关文章
- 内功心法 -- java.util.LinkedList<E> (3)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (4)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (5)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (6)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (7)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (8)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 内功心法 -- java.util.LinkedList<E> (2)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- java.util.ArrayList、java.util.vector和java.util.LinkedList (JDK 1.8.0_111)
一.java.util.ArrayList 1.1 ArrayList 继承结构 ArrayList实现了RandomAccess,可以随机访问(其实就是通过数组下标访问):实现了Cloneable, ...
- JDK1.8源码(六)——java.util.LinkedList 类
上一篇博客我们介绍了List集合的一种典型实现 ArrayList,我们知道 ArrayList 是由数组构成的,本篇博客我们介绍 List 集合的另一种典型实现 LinkedList,这是一个有链表 ...
随机推荐
- 如何实用便捷的在本地真机调试WEB端HTML5网页
先简单介绍两款常用但需要一定条件或限制的工具 1.如果你能FQ chrome在32版本后就自带了移动端调度工具,可以在Android直接联调,但唯一遗憾的是,在我大天朝要FQ后才能行的通,我自己试了后 ...
- oracle数据库的date和timestamp类型
1.date类型存储数据的格式为年月日时分秒,可以精确到秒 timestamp类型存储数据的格式为年月日时分秒,可以精确到纳秒(9位) 2.date类型 Date类型的数据可以显示到年月日,也可以显示 ...
- sqlmap的使用方法 ——时光凉春衫薄
普通注入 Sqlmap -u “http://www.xxxxxx.com/xxxx/xxx/xxx.xxx?xx=xx” --dbs 找到一个sql的注入点 探测他的库名 access的直接探表 ...
- python OS 模块 文件目录操作
Python OS 模块 文件目录操作 os模块中包含了一系列文件操作的函数,这里介绍的是一些在Linux平台上应用的文件操作函数.由于Linux是C写的,低层的libc库和系统调用的接口都是C AP ...
- 142.Linked List Cycle II---双指针
题目链接 题目大意:141题目的扩展,给出单链表,判断是否有环,如果有环,找出环的开始的结点,如果没有环,返回null. 法一(借鉴):在已经找出单链表环的基础上再找开始结点,要时刻记住这个环不一定是 ...
- Java的Stack类实现List接口真的是个笑话吗
今天在网上闲逛时看到了这样一个言论,说“Java的Stack类实现List接口的设计是个笑话”. 当然作者这篇文章的重点不是这个,原本我也只是一笑置之,然而看评论里居然还有人附和,说“Ja ...
- [置顶]
人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)
这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...
- wordpress后台加载速度异常缓慢排查记录(原创)
原因在于在function.php函数中加入了下面的代码导致了缓慢: //停用版本更新通知remove_action('load-update-core.php', 'wp_update_themes ...
- beego小技巧两则:通过命令行自定义端口和环境,url中带有中划线处理
1,通过命令行自定义端口和环境 先用flag提取参数,如果要环境,就反向注进去, 如果是端口,就打到beego.Run函数里去. 2,在作router里的url解析时,如果URL中含有-中划线,用严格 ...
- IEEEXtreme 9.0 - Digit Fun!
博客中的文章均为 meelo 原创,请务必以链接形式注明 本文地址 Xtreme 9.0 - Digit Fun! 题目来源:第9届IEEE极限编程大赛第1题 Recurrence relations ...