【问题标题】:What LinkedLists in Collection interface are single or doubly?Collection 接口中的哪些 LinkedLists 是单一的还是双重的?
【发布时间】:2020-07-25 13:43:28
【问题描述】:

我非常了解 SLL 或 DLL 的概念。 但是我们在 Collection 界面中使用的是哪一个呢?

到目前为止,我在接口List、Queue和Dequeue中都遇到过LinkedList。

还有别的吗?我们在这 3 个接口中使用的是什么类型的 LinkedList? 我怎么可能知道呢?

【问题讨论】:

  • 需要注意的是Java的原生链表存在一些问题。没有等效的 C++ std::list::splice,它可用于通过更改节点指针来移动列表中的节点或从一个列表移动到另一个列表,而无需对节点进行任何分配或释放。 Java 的迭代器不能被浅拷贝,赋值只是将另一个变量指向同一个迭代器实例。从列表中添加或删除任何节点将使该列表的所有迭代器无效(用于执行添加或删除的迭代器除外)。

标签: java collections linked-list singly-linked-list doubly-linked-list


【解决方案1】:

List、Queue 和 Dequeue 只是接口,它们提供了一个由实现来满足的契约。列表如何实现并不重要(实际上它甚至不必是列表)。

LinkedList javadoc 的第一行状态

List 和 Deque 接口的双向链表实现。

【讨论】:

  • 谢谢,我查过了。想知道为什么当它具有双重实现时,我什至了解了单一和双重之间的区别。还有一件事,它说:索引到列表中的操作将从开头或结尾遍历列表,以更接近指定索引的为准。你知道LinkedList是如何知道哪个更接近的吗? In 从 start 或 end 开始,并且仅引用下一个/上一个索引。所以它不知道他会在未来的指针中获得什么价值..
  • 它知道列表中有多少元素(大小)。假设一个列表有 10 个元素,并且您要求索引 3 处的元素,那么它将从列表的头部开始。如果您要求第 8 个元素,它将从列表的末尾(尾部)遍历
【解决方案2】:

java中的所有链表都是双向链表

数组和数组列表有一个主要缺点:从数组中间删除一个元素成本太高。因为数组中删除元素之后的所有元素都必须移到数组的前面。 (向数组中插入元素也是如此)

然后 Java 提供解决方案:
Java 引入了链表来解决这个问题。在Java编程语言中,所有链表实际上都是双向链接的,其中每个节点还存储了对前驱节点的引用。

【讨论】:

  • 如果您解释了为什么会出现这种情况或添加支持此声明的参考链接,这将是一个更好的答案
猜你喜欢
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多