java提供的LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.

LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是 List接口链表的实现。基于链表实现的方式使得LinkedList在插入和删除时更优于ArrayList,而随机访问则比ArrayList逊色 些。

定义:

public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable

LinkedList继承AbstractSequentialList,并且实现List、Deque、 Cloneable、Serializable接口。

其中AbstractSequentialList提供了 List 接口的骨干实现,从而最大限度地减少了实现受“连续访问”数据存储(如链接列表)支持的此接口所需的工作,从而以减少实现List接口的复杂度。 Deque一个线性 collection,支持在两端插入和移除元素,定义了双端队列的操作。

属性:两个基本属性size、header

private transient Entry<E> header = new Entry<E>(null, null, null);
private transient int size = 0;

其中size表示的LinkedList的大小,header表示链表的表头,Entry为节点对象。 Entry为LinkedList的内部类,它定义了存储的元素。该元素的前一个元素、后一个元素,这是典型的双向链表定义方式。

private static class Entry<E> {E element;        //元素节点Entry<E> next;    //下一个元素Entry<E> previous;  //上一个元素Entry(E element, Entry<E> next, Entry<E> previous) {this.element = element;this.next = next;this.previous = previous;}}

构造方法: LinkedList()和LinkedList(Collection<? extends E> c)

/***  构造一个空列表。*/public LinkedList() {header.next = header.previous = header;}/***  构造一个包含指定 collection 中的元素的列表,这些元素按其 collection 的迭代器返回的顺序排列。*/public LinkedList(Collection<? extends E> c) {this();addAll(c);}

LinkedList(Collection<? extends E> c): 说白了就是把一个已知的collection集合转化成链表,构造一个包含指定 collection 中的元素的列表,这些元素按其 collection 的迭代器返回的顺序排列。该构造函数首先会调用LinkedList(),构造一个空列表,然后调用了addAll()方法将Collection中的所 有元素添加到列表中。

增加方法:

add(E e): 将指定元素添加到此列表的结尾。

public boolean add(E e) {addBefore(e, header);return true;}
private Entry<E> addBefore(E e, Entry<E> entry) {//利用Entry构造函数构建一个新节点 newEntry,Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);//修改newEntry的前后节点的引用,确保其链表的引用关系是正确的newEntry.previous.next = newEntry;newEntry.next.previous = newEntry;//容量+1size++;//修改次数+1modCount++;return newEntry;}

在addBefore方法中无非就是做了这件事:构建一个新节点newEntry,然后修改其前后的引用。

LinkedList还提供了其他的增加方法:

  add(int index, E element);//在此列表中指定的位置插入指定的元素。addAll(Collection<? extends E> c);//添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。addAll(int index, Collection<? extends E> c);//将指定 collection 中的所有元素从指定位置开始插入此列表。AddFirst(E e);// 将指定元素插入此列表的开头。addLast(E e);//将指定元素添加到此列表的结尾。

移出方法:

remove(Object o):从此列表中移除首次出现的指定元素(如果存在)

public boolean remove(Object o) {if (o==null) {for (Entry<E> e = header.next; e != header; e = e.next) {if (e.element==null) {remove(e);return true;}}} else {for (Entry<E> e = header.next; e != header; e = e.next) {if (o.equals(e.element)) {remove(e);return true;}}}return false;}
private E remove(Entry<E> e) {if (e == header)throw new NoSuchElementException();//保留被移除的元素:要返回E result = e.element;//将该节点的前一节点的next指向该节点后节点e.previous.next = e.next;//将该节点的后一节点的previous指向该节点的前节点//这两步就可以将该节点从链表从除去:在该链表中是无法遍历到该节点的e.next.previous = e.previous;//将该节点归空e.next = e.previous = null;e.element = null;size--;modCount++;return result;}

其他的移除方法:

      clear();//从此列表中移除所有元素。remove();//获取并移除此列表的头(第一个元素)。remove(int index);//移除此列表中指定位置处的元素。remove(Objec o);//从此列表中移除首次出现的指定元素(如果存在)。removeFirst();//移除并返回此列表的第一个元素。removeFirstOccurrence(Object o);//从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表时)。removeLast();//移除并返回此列表的最后一个元素。removeLastOccurrence(Object o);//从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表时)。

查找方法:

      get(int index);//返回此列表中指定位置处的元素。getFirst();//返回此列表的第一个元素。getLast();//返回此列表的最后一个元素。indexOf(Object o);//返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。lastIndexOf(Object o);//返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。

java集合框架LinkedList类的方法理解相关推荐

  1. JAVA集合框架工具类自定义Collections集合方法

    项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式. 话不多说,看代码: 1.封装的自定义集合工具类:CollectionsCustom [Java] 纯文本 ...

  2. Java 集合框架(8)---- 总结

    文章目录 前言 集合类别 线性集合类 ArrayList LinkedList .Queue.Deque Vector Stack 映射集合类 HashMap TreeMap LinkedHashMa ...

  3. java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...

    本文关键词: java集合框架  框架设计理念  容器 继承层级结构 继承图 集合框架中的抽象类  主要的实现类 实现类特性   集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...

  4. 史上最全的集合框架讲解 ----- Java 集合框架(3)---- Map 相关类最全解析

    引言 好了,步入正题,上篇文章Java 集合框架(2)---- List 相关类解析中我们一起看了一下 List 接口的相关具体类(ArrayList.LinkedList-.),这篇开始我们开始探索 ...

  5. java集合框架类_Java集合框架总结—超详细-适合面试

    Set和List接口是Collection接口派生的两个子接口,Queue是Java提供的队列实现,类似于List. Map实现类用于保存具有映射关系的数据(key-value). 2.Set.Lis ...

  6. Java集合框架概述及Collection接口方法讲解

    Java集合框架概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储.另一方面,使用Array存储对象方面具有一些弊 端,而Java 集合就像一种容 ...

  7. Java集合框架之四大接口、常用实现类,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  8. JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类

    一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...

  9. Java 集合框架(5)---- Map 相关类解析(中)

    本文标题大纲: 文章目录 前言 HashMap TreeMap 指定 TreeMap 的元素排序方式 前言 还是先上那张图吧,我又偷懒了,还是只关注 Map 接口下的类就行了: 在上上篇文章中我们一起 ...

最新文章

  1. 单调队列多重背包时间复杂度O(vn)
  2. 用python实现复选框树_如何使用Python中的复选框创建树视图
  3. C4D立体素材|旅游度假主题海报,设计点睛之笔
  4. java 反射获取属性名和值_面试官这样问我Java反射原理,我刚好都会
  5. Oracle数据库连接、退出缓慢问题查询与处理
  6. 一个32岁入门的70后程序员给我的启示
  7. vue基础-25-vue的基础面试知识
  8. 虚拟机安装OpenGauss企业版
  9. 阿里云免费证书SSL下载及安装
  10. 自我鉴定200字大专生计算机专业,大专毕业生自我鉴定200字
  11. 头孢是什么?什么是双硫仑反应?//2021-2-11
  12. Activiti6.0.0及以上版本集成Activiti Modeler
  13. 怎么用计算机看亲戚关系,小米亲戚计算器怎么用?如何利用小米计算器查询亲戚关系...
  14. 怎么删除PDF文件页面?PDF怎么删除其中一页
  15. 本机电脑访问其他电脑的磁盘
  16. 计算机专业中观分析是什么,计算机专业本科论文提纲模板样本 计算机专业本科论文大纲怎样写...
  17. Java编译成功但是运行不成功的原因
  18. 最短路径问题(Dijkstra常用用法总结)
  19. 用vb.net制作贪吃蛇游戏
  20. catia中画螺杆 螺纹

热门文章

  1. V3S代码整合中遇到的一个奇怪问题
  2. ESP8266-SDK编写的TM1668程序驱动数码管
  3. 与nlp相关的模型概览
  4. 向量收敛在matlab中,matlab实验报告
  5. TCP/IP总结(4)TCP 概述
  6. cmake (4)引用子目录的库
  7. 微众WeCross 跨链平台(7)跨链路由
  8. node + express + mongodb 手动配置
  9. 93. 复原 IP 地址(回溯算法)
  10. A53 cache的架构解读