java集合框架LinkedList类的方法理解
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类的方法理解相关推荐
- JAVA集合框架工具类自定义Collections集合方法
项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式. 话不多说,看代码: 1.封装的自定义集合工具类:CollectionsCustom [Java] 纯文本 ...
- Java 集合框架(8)---- 总结
文章目录 前言 集合类别 线性集合类 ArrayList LinkedList .Queue.Deque Vector Stack 映射集合类 HashMap TreeMap LinkedHashMa ...
- java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...
本文关键词: java集合框架 框架设计理念 容器 继承层级结构 继承图 集合框架中的抽象类 主要的实现类 实现类特性 集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...
- 史上最全的集合框架讲解 ----- Java 集合框架(3)---- Map 相关类最全解析
引言 好了,步入正题,上篇文章Java 集合框架(2)---- List 相关类解析中我们一起看了一下 List 接口的相关具体类(ArrayList.LinkedList-.),这篇开始我们开始探索 ...
- java集合框架类_Java集合框架总结—超详细-适合面试
Set和List接口是Collection接口派生的两个子接口,Queue是Java提供的队列实现,类似于List. Map实现类用于保存具有映射关系的数据(key-value). 2.Set.Lis ...
- Java集合框架概述及Collection接口方法讲解
Java集合框架概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储.另一方面,使用Array存储对象方面具有一些弊 端,而Java 集合就像一种容 ...
- Java集合框架之四大接口、常用实现类,java基础面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类
一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...
- Java 集合框架(5)---- Map 相关类解析(中)
本文标题大纲: 文章目录 前言 HashMap TreeMap 指定 TreeMap 的元素排序方式 前言 还是先上那张图吧,我又偷懒了,还是只关注 Map 接口下的类就行了: 在上上篇文章中我们一起 ...
最新文章
- 单调队列多重背包时间复杂度O(vn)
- 用python实现复选框树_如何使用Python中的复选框创建树视图
- C4D立体素材|旅游度假主题海报,设计点睛之笔
- java 反射获取属性名和值_面试官这样问我Java反射原理,我刚好都会
- Oracle数据库连接、退出缓慢问题查询与处理
- 一个32岁入门的70后程序员给我的启示
- vue基础-25-vue的基础面试知识
- 虚拟机安装OpenGauss企业版
- 阿里云免费证书SSL下载及安装
- 自我鉴定200字大专生计算机专业,大专毕业生自我鉴定200字
- 头孢是什么?什么是双硫仑反应?//2021-2-11
- Activiti6.0.0及以上版本集成Activiti Modeler
- 怎么用计算机看亲戚关系,小米亲戚计算器怎么用?如何利用小米计算器查询亲戚关系...
- 怎么删除PDF文件页面?PDF怎么删除其中一页
- 本机电脑访问其他电脑的磁盘
- 计算机专业中观分析是什么,计算机专业本科论文提纲模板样本 计算机专业本科论文大纲怎样写...
- Java编译成功但是运行不成功的原因
- 最短路径问题(Dijkstra常用用法总结)
- 用vb.net制作贪吃蛇游戏
- catia中画螺杆 螺纹