专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 java中的linkedlist的实现原理

java中的linkedlist的实现原理

更新时间:2020-07-31 16:33:17 来源:动力节点 浏览1779次

LinkedList是Java List类型的集合类的一种实现,此外,LinkedList还实现了Deque接口。本文基于Java1.8,对于LinkedList的实现原理做一下详细讲解。

java中的linkedlist的实现原理

一、LinkedList实现原理总结

LinkedList的实现原理总结如下:

①数据存储是基于双向链表实现的。

②插入数据很快。先是在双向链表中找到要插入节点的位置index,找到之后,再插入一个新节点。双向链表查找index位置的节点时,有一个加速动作:若index<双向链表长度的1/2,则从前向后查找;否则,从后向前查找。

③删除数据很快。先是在双向链表中找到要插入节点的位置index,找到之后,进行如下操作:node.previous.next=node.next;node.next.previous=node.previous;node=null。查找节点过程和插入一样。

④获取数据很慢,需要从Head节点进行查找。

⑤遍历数据很慢,每次获取数据都需要从头开始。

二、ArrayList的实现原理详解

1.LinkedList概述:

List接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括null)。除了实现List接口外,LinkedList类还为在列表的开头及结尾get、remove和insert元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。

此类实现Deque接口,为add、poll提供先进先出队列操作,以及其他堆栈和双端队列操作。

所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。

注意,此实现不是同步的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用Collections.synchronizedList方法来“包装”该列表。最好在创建时完成这一操作,以防止对列表进行意外的不同步访问,如下所示:

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

此类的iterator和listIterator方法返回的迭代器是快速失败的:在迭代器创建之后,如果从结构上对列表进行修改,除非通过迭代器自身的remove或add方法,其他任何时间任何方式的修改,迭代器都将抛出ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来不确定的时间任意发生不确定行为的风险。

注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何硬性保证。快速失败迭代器尽最大努力抛出ConcurrentModificationException。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。

java中的linkedlist的实现原理

以上就是动力节点java培训机构的小编针对“java中的linkedlist的实现原理”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>