Java LinkedList指南

1. 介绍

LinkedList是一个双向链表, 实现了ListDeque接口。它实现全部可选的list操做,而且存储对象能够为nulljava

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指针便可。code

3.3 内存的使用状况

LinkedList的内存占用比ArrayList更多,由于在每个接口都须要存储两个引用,一个用于记录前一个元素,一个用于记录后一个元素。而ArrayList中仅须要保持数据和它的索引。对象

4. 用法

如下是一些代码示例,展现了如何使用LinkedList索引

4.1 建立

LinkedList<Object> 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程序猿 ^_^
相关文章
相关标签/搜索