当我宣布NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:jsonURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120.0];
时:
LinkedList
它不支持任何List<String> names = new LinkedList<String>();
的特殊方法(例如:LinkedList
,names.peekLast()
)
但是当我宣布:
names.pollFirst()
然后它支持这些方法。
是的,很明显原因是参考,因为LinkedList<String> names = new LinkedList<String>();
包含的方法和LinkedList
没有!
但我的问题是,当我想与List
合作时,哪一个更好更正确?或者它们的用途是什么?
答案 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
你可以通过自我区分。 :)