1. 介绍

LinkedList是一个双向链表, 实现了ListDeque接口。它实现所有可选的list操作,并且存储对象可以为null

2. 特点

LinkedList具有以下特点:

  • 查到列表中的元素,需要从头至尾的遍历列表
  • 没有同步
  • 它的IteratorListIterator迭代器是快速失败的(这意味着在迭代器创建之后,如果修改了列表,将抛出一个ConcurrentModificationException)
  • 每个元素都是一个节点,它保留对下一个和前一个节点的引用
  • 维护了插入顺序

虽然LinkedList没有同步,但是我们可以通过调用Collections.synchronizedList方法创建它的同步版本,如:

List list = Collections.synchronizedList(new LinkedList(...));

3. 与ArrayList比较

虽然它们都实现了List接口,但它们具有不用的语义,这将影响我们使用哪一个。

3.1 结构体

ArrayList是基于索引的数据结构,它提供了对其元素的随机访问,其性能为O(1)。

LinkedList将数据存储为元素列表,并且每个元素都链接到上一个和下一个元素。在这样情况下,其元素搜索的复发度为O(n)。

3.2 操作

LinkedList中的元素进行插入,删除操作更快,因为当元素添加到集合内的某个位置时,不需要调整数组的大小或更新索引,只需更改前后元素的prenext指针即可。

3.3 内存的使用情况

LinkedList的内存占用比ArrayList更多,因为在每一个接口都需要存储两个引用,一个用于记录前一个元素,一个用于记录后一个元素。而ArrayList中仅需要保持数据和它的索引。

4. 用法

以下是一些代码示例,展示了如何使用LinkedList

4.1 创建

LinkedList<Object> linkedList = new LinkedList<>();

4.2 添加元素

LinkedList实现了ListDeque接口,除了标准的add()addAll(),还提供了addFirst()addLast(),它们分别在开头或结尾添加一个元素。

4.3 删除元素

与元素添加类似,LinkedList还提供了removeFirst()removeLast()

此外,还有方便的方法removeFirstOccurence()removeLastOccurence()返回boolean。如果collection中包含了指定的元素,则返回true

4.4 队列操作

Deque接口提供类似队列的行为(实际上Deque扩展了Queue接口):

linkedList.poll();
linkedList.pop();

这些方法检索第一个元素并将其从列表中删除。
poll()pop()的区别是当列表为空时,pop就会抛出NoSuchElementException()异常,而poll则会返回null

linkedList.push(Object o);

push将在列表头添加一个元素。

LinkedList还有许多其他操作,使用方式与ListDeque一样。

5. 结论

ArrayList通常是默认的List实现。

但是,在某些使用情况下,使用LinkedList会是更好的选择。例如需要频繁的插入,删除,更新列表元素时。


Author :笑笑粑粑
曾用网名:TinyKing
微信公众号:Java码农
知乎专栏: 爱笑笑爱分享
个人博客: 爱笑笑,爱生活
自我评价: 一个爱好广泛的CRUD程序猿 ^_^

Java LinkedList指南相关推荐

  1. java 面试指南_Java面试参考指南–第1部分

    java 面试指南 JAVA面向对象的概念 Java in基于面向对象的概念,它允许更高级别的抽象以实际方式解决任何问题. 面向对象的方法将实际对象中的问题解决方案概念化,更易于在整个应用程序中重用. ...

  2. 《Java修炼指南:高频源码解析》阅读笔记一Java数据结构的实现集合类

    一.Arrays工具类 来自java.util.Arrays,用来处理数组的各种方法. 1.1 List asList(T- a) 用来返回由自定数组支持的固定大小列表,虽然这里返回了一个List,但 ...

  3. Java学习指南从入门到入土

    Java学习指南从入门到入土 本身其实只是刚刚入门,只是经历了两年时间的风吹雨打,经历了各种bug的折磨和学习各种框架的辛酸,才有得现有的 刚刚入门.有句老话说的好叫做 从入门到放弃,人生不易要及时放 ...

  4. [翻译]现代java开发指南 第二部分

    现代java开发指南 第二部分 第二部分:部署.监控 & 管理,性能分析和基准测试 第一部分,第二部分,第三部分 =================== 欢迎来到现代 Java 开发指南第二部 ...

  5. 《Java编码指南:编写安全可靠程序的75条建议》—— 指南20:使用安全管理器创建一个安全的沙盒...

    本节书摘来异步社区<Java编码指南:编写安全可靠程序的75条建议>一书中的第1章,第1.20节,作者:[美]Fred Long(弗雷德•朗), Dhruv Mohindra(德鲁•莫欣达 ...

  6. 《Java编码指南:编写安全可靠程序的75条建议(英文版)》—— 2.7 修复错误...

    本节书摘来异步社区<Java编码指南:编写安全可靠程序的75条建议(英文版)>一书中的第2章,第2.7节,作者:[美]Fred Long(弗雷德•朗),Dhruv Mohindra(德鲁• ...

  7. java linkedlist 查找_Java中LinkedList真的是查找慢增删快

    测试结果 废话不多说,先上测试结果.作者分别在ArrayList和LinkedList的头部.尾部和中间三个位置插入与查找100000个元素所消耗的时间来进行对比测试,下面是测试结果 (感谢@Hosa ...

  8. 推荐一本书《网络机器人java编程指南》

    如果对搜索引擎感兴趣,推荐给大家一本书,Jeff Heaton的<网络机器人java编程指南>.中文版,E文不好的这下不用头痛了.有需要的,可以留言给我. Jeff Heaton is a ...

  9. java初学者指南_Java代理初学者指南

    java初学者指南 尽管Java初学者很快学会了键入public static void main来运行他们的应用程序,但是即使是经验丰富的开发人员也常常不知道JVM对Java流程的两个附加入口点的支 ...

最新文章

  1. 这个假发太逼真!GAN帮你换发型,毫无违和感!
  2. java 反序列化 ysoserial exploit/JRMPListener 原理剖析
  3. Hadoop Yarn配置参数整理(非常全面)
  4. Nacos 集群集成SpringBoot2.x 微服务_02
  5. GitHub 近两万 Star!深度学习 500 问带你入门人工智能!| 技术头条
  6. idea自动下载gradle_如何在IDEA中下载Gradle项目的依赖源?
  7. 学习笔记DL003:神经网络第二、三次浪潮,数据量、模型规模,精度、复杂度,对现实世界冲击...
  8. 这次是16.7亿元!新能源汽车骗补何时休?
  9. 黑盒测试的常见测试方法
  10. f分布表完整图a=0.01_图 python 实现
  11. python成语接龙代码_Python实现成语接龙
  12. centos 打包某个目录_CentOS 打包压缩文件 zip 命令详解
  13. L44.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- su和visudo
  14. Mysql如何存取Emoji表情包
  15. 华为android o适配名单,华为给出首批升级名单,这8款华为手机率先适配Android Q 10系统...
  16. 有效年利率和年化百分比利率
  17. 微信小程序把阿里icon变为组件
  18. 手持PDA无线打印 扫描一体方案-PDA系统程序
  19. Wind River Linux
  20. gss1_GSS简介:网格样式表

热门文章

  1. NSIS 的 Modern UI 教程(二)
  2. vuex-class用法
  3. 请你讲一讲JavaScript有哪些数据类型, 数据类型判断有哪些方法?
  4. 树——通用树结点数目、高度和度数的实现
  5. 河南省第十一届ACM程序设计竞赛 修路
  6. js基础练习题 二次封装函数
  7. C#.NET常见问题(FAQ)-命名空间namespace如何理解
  8. 洛谷——P1548 棋盘问题
  9. 翻译《Writing Idiomatic Python》(五):类、上下文管理器、生成器
  10. 使用zlib库进行数据压缩