Java 集合(链接列表概念)



当我声明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和LinkedList

您也可以参考预言机文档

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

你可以自己区分。 :)

相关内容

  • 没有找到相关文章

最新更新