Java集合(LinkedList概念)

时间:2016-02-08 10:12:04

标签: java collections linked-list

当我宣布NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:jsonURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120.0]; 时:

LinkedList

它不支持任何List<String> names = new LinkedList<String>(); 的特殊方法(例如:LinkedListnames.peekLast()

但是当我宣布:

names.pollFirst()

然后它支持这些方法。

是的,很明显原因是参考,因为LinkedList<String> names = new LinkedList<String>(); 包含的方法和LinkedList没有!

但我的问题是,当我想与List合作时,哪一个更好更正确?或者它们的用途是什么?

3 个答案:

答案 0 :(得分:2)

如果您需要使用LinkedList中不存在的List方法,则应使用LinkedList引用(您可以使用List引用并转换为LinkedList为了调用LinkedList具体方法,但这样做不太合理。

否则,最好使用List接口来保存引用,因为它使您的代码更通用,因为它不依赖于任何特定的List实现。

答案 1 :(得分:0)

好吧,List基本上由一个数组支持,该数组通常大于当前的项目数。这些元素放在一个数组中,当旧的数组空间不足时,会创建一个新数组。这对于索引访问来说很快,但在删除或插入列表中或开头的元素时速度很慢。添加/删除列表末尾的条目相当便宜。

LinkedList是一个双向链表 - 每个节点都知道它的前一个条目和下一个条目。这对于在特定节点(或头/尾)之后/之前插入很快,但在索引访问时速度很慢。

LinkedList通常会占用比List更多的内存,因为它需要所有下一个/上一个引用的空间 - 并且数据可能具有较少的引用局部性,因为每个节点都是一个单独的对象。另一方面,List可以有一个比当前需要大得多的后备数组。

来自Difference between List<T> and LinkedList<T>

的参考资料

您也可以参考oracle docs

Linked List

所有操作的执行都与双向链表一样。索引到列表中的操作将从开头或结尾遍历列表,以较接近指定索引为准。

List

List接口提供了四种对列表元素进行位置(索引)访问的方法。列表(如Java数组)基于零。请注意,对于某些实现(例如,LinkedList类),这些操作可以与索引值成比例地执行。因此,如果调用者不知道实现,则迭代遍历列表中的元素通常比通过它进行索引更好。

答案 2 :(得分:-1)

嗯,有一个非常简单的解释是List<>就像数组一样,当它的空间不足时正在制作新的数组。 LinkedList<>就像双向链表,每个节点都有前一个节点和下一个节点的链接。

更多可以从oracle文档中搜索 https://docs.oracle.com/javase/7/docs/api/java/util/List.html

https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html

你可以通过自我区分。 :)