博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java基础提高之LinkedList
阅读量:5861 次
发布时间:2019-06-19

本文共 976 字,大约阅读时间需要 3 分钟。

        这一篇我们介绍LinkedList。LinkedList结构简单详细请往下看。

简单介绍

        按照源码中的说明,LinkedList是List与Deque接口的双链表实现,实现所有可选操作,并允许所有类型的数据作为元素包括null。

        值得注意的是,LinkedList在根据索引查找的时候,会根据此索引离头指针与尾指针的距离进行权衡,选择开始遍历首位从头还是还是从尾开始。

        LinkedList不是线程安全的,如果多个线程同步的访问一个LinkedList并且至少有一个线程改变了这个list的结构,那么这个LinkedList必须要做额外的加锁操作来确保线程的安全性。这个额外的操作可以是在如果这个list被某个对象封装,可以对那个对象加锁来完成,如果没有那种对象,可以使用: List list = Collections.synchronizedList(new LinkedList(...)); 来完成加锁功能。

        LinkedList返回的Iterator是基于快速失败机制的。关于快速失败机制可以看。

存储结构

与前几篇文章一样,我们通过查看LinkedList的属性来探讨其存储结构:

他的属性内容挺简单,就这么几个。我们简单介绍一下

  1. size: 其实不用多说,就是记录存储元素的数量的。

  2. first: 我们说过,LinkedList是一个双向链表,那这个first就是这个双向链表的头指针了。

  3. last: 这个last就是双向链表的尾指针。

现在我们具体来看一下LinkedList内部结点Node这个类长什么样子:

很简单,包含一个存储数据的item,一个前继节点prev,一个后继节点next,现在我们就可能清晰的认识到LinkedList的存储结构了,我们用个图来加深一下印象。

其中prex为null的就是head节点,也就是图中第一个节点,next为null的节点就是last节点,就是图中的最后一个节点

总结

  1. 与ArrayList相比较,都实现了Collection接口
  2. ArrayList基于数组,具有较高的查询速度,而LinkedList基于双向链表,具有较快的添加或者删除的速度。
  3. 由于使用链表这种数据结构,不需要扩容

转载于:https://juejin.im/post/5cf262dae51d4556db6949b7

你可能感兴趣的文章
嵌入式开发之uart---编程
查看>>
【图解数据结构】 树
查看>>
sizeof的用法(转)
查看>>
c# 中base64字符串和图片的相互转换
查看>>
C#调试信息打印到输出窗口
查看>>
关于Apache.commons.net中的telnet协议调用中输入cmd命令的长度的问题
查看>>
生成二维码
查看>>
SqlParameter传入0变成NULL
查看>>
mysql 时间函数
查看>>
1203整理
查看>>
方程的解_NOI导刊2010提高
查看>>
重置网络命令win7
查看>>
zabbix日常监控(监控缓存)
查看>>
Java 8 中为什么要引出default方法
查看>>
jmeter 响应结果分析二
查看>>
Java中的split函数的用法
查看>>
js 小练习之indexOf
查看>>
[20]CSS3 动画效果
查看>>
迭代器和生成器
查看>>
dokcer常用命令
查看>>