java基础提高之LinkedList

        这一篇我们介绍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

猜你喜欢

转载自blog.csdn.net/weixin_33734785/article/details/91482344