当我声明LinkedList
像:
List<String> names = new LinkedList<String>();
它不支持任何LinkedList
的特殊方法(例如:names.peekLast()
,names.pollFirst()
(
但是当我声明如下:
LinkedList<String> names = new LinkedList<String>();
然后它支持这些方法。
是的,很明显,理性是参考,因为LinkedList
包含的是方法,而List
没有!
但我的问题是,当我想与LinkedList
一起工作时,哪一个更好和正确?或者它们有什么用?
如果您需要使用List
中不存在的LinkedList
方法,则应使用LinkedList
引用(您可以使用List
引用并强制转换为LinkedList
以调用LinkedList
特定方法,但这不太有意义(。
否则,最好使用 List
接口来保存引用,因为它会使代码更加通用,因为它不依赖于任何特定的List
实现。
好吧,List基本上由一个数组支持,该数组通常大于当前项目数。元素放在一个数组中,当旧数组空间不足时创建一个新数组。这对于按索引访问来说很快,但在列表中或开始时删除或插入元素时速度很慢。在列表末尾添加/删除条目相当便宜。
LinkedList 是一个双向链表 - 每个节点都知道它的前一个条目和下一个条目。这对于在特定节点(或头/尾(之后/之前插入时速度很快,但在按索引访问时速度很慢。
LinkedList 通常会比 List 占用更多的内存,因为它需要空间来存储所有这些下一个/以前的引用 - 并且数据可能具有较少的引用位置,因为每个节点都是一个单独的对象。另一方面,列表可以有一个比其当前需求大得多的后备阵列。
参考自List
您也可以参考预言机文档
Linked List
所有操作都按照双向链表的预期执行。索引到列表中的操作将从列表的开头或结尾遍历列表,以更接近指定索引为准。
List
List 接口提供了四种方法,用于对列表元素进行位置(索引(访问。列表(如 Java 数组(从零开始。请注意,这些操作可能会与某些实现(例如 LinkedList 类(的索引值成比例地执行。因此,如果调用方不知道实现,则迭代列表中的元素通常比通过它编制索引更可取。
嗯,关于这一点有一个非常简单的解释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
你可以自己区分。 :)