首页 > Java资讯 > java中的linkedlist的实现原理

java中的linkedlist的实现原理

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


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的实现原理”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


热门课程推荐

全部班型支持免费试学

动力节点在线报名表(此信息已加密,请放心填写)

返回顶部