资讯专栏INFORMATION COLUMN

Java LinkedList指南

BakerJ / 764人阅读

摘要:结构体是基于索引的数据结构,它提供了对其元素的随机访问,其性能为。在这样情况下,其元素搜索的复发度为。此外,还有方便的方法和返回。队列操作接口提供类似队列的行为实际上扩展了接口这些方法检索第一个元素并将其从列表中删除。结论通常是默认的实现。

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 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程序猿 ^_^

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73120.html

相关文章

  • Java 性能调优指南Java 集合概览

    摘要:单线程集合本部分将重点介绍非线程安全集合。非线程安全集合框架的最新成员是自起推出的。这是标准的单线程阵营中唯一的有序集合。该功能能有效防止运行时造型。检查个集合之间不存在共同的元素。基于自然排序或找出集合中的最大或最小元素。 【编者按】本文作者为拥有十年金融软件开发经验的 Mikhail Vorontsov,文章主要概览了所有标准 Java 集合类型。文章系国内 ITOM 管理平台 O...

    gnehc 评论0 收藏0
  • 常见的集合容器应当避免的坑

    摘要:尽可能避免使用,会导致复制数组,降低效率。再额外提一点,我们常用的另一个容器也是推荐要初始化长度从而避免扩容。 showImg(https://segmentfault.com/img/remote/1460000019659723); 前言 前不久帮同事一起 review 一个 job 执行缓慢的问题时发现不少朋友在撸码实现功能时还是有需要细节不够注意,于是便有了这篇文章。 Arra...

    GraphQuery 评论0 收藏0
  • 一份送给Java初学者的指南

    摘要:编程思想第版这本书要常读,初学者可以快速概览,中等程序员可以深入看看,老鸟还可以用之回顾的体系。以下视频整理自慕课网工程师路径相关免费课程。 我自己总结的Java学习的系统知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailclimb/Java-Guide 笔者建议初学者学习Java的方式:看书+视频+实践(初...

    banana_pi 评论0 收藏0
  • 一文掌握关于Java数据结构所有知识点(欢迎一起完善)

    摘要:是栈,它继承于。满二叉树除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。没有键值相等的节点。这是数据库选用树的最主要原因。 在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫)。所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以及面试的相关知识。本来是想通过Gitbook的...

    keithxiaoy 评论0 收藏0
  • 这几道Java集合框架面试题在面试中几乎必问

    摘要:若遇到哈希冲突,则将冲突的值加到链表中即可。之后相比于之前的版本,之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值默认为时,将链表转化为红黑树,以减少搜索时间。有序,唯一红黑树自平衡的排序二叉树。 本文是最最最常见Java面试题总结系列第三周的文章。主要内容: Arraylist 与 LinkedList 异同 ArrayList 与 Vector 区别 HashMap的底层...

    bigdevil_s 评论0 收藏0

发表评论

0条评论

BakerJ

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<