【发布时间】:2012-01-12 04:16:14
【问题描述】:
我需要能够将 2 个大型集合合并为 1 个。我最适合使用哪种集合类型?我不需要随机访问各个元素。通常我会选择链表,但是我不能将 Java 中的 2 个链表与 O(1) 的运行时合并,这可以在许多其他语言中完成,因为我必须将每个元素复制到新列表.
编辑:感谢您的所有回答。您的回答都非常有帮助,我设法完成了工作。下次我将使用我自己的链表实现开始。
【问题讨论】:
-
排序列表的延迟合并听起来如何?合并的结果可以在 O(1) 中构建,并为列表中的每个操作添加一个摊销的 O(1),直到它被实际评估。
-
你可以自己实现一个 LinkedList,但 LinkedList 本身就很耗时。
-
I can't merge 2 linkedlist in Java with a runtime of O(1)这显然不是真的。如果你在 Java 中实现了自己的链表,你可以在 Java 中合并 2 个链表,运行时间为 O(1)。该语句仅适用于标准库实现,因此您的语句可能应为“我无法将 2 java.util.LinkedList 与 O(1) 的运行时合并”。 -
@LieRyan 吹毛求疵?我认为每个人都非常清楚,他在这里清楚地谈论 JDK 提供的类。我们现在真的必须完全量化我们提到的每一个类吗?我已经可以看到它:“嘿,我编写了自己的番石榴 Iterables 类,它不能这样做,你错了!你应该说改用
com.google.common.collect.Iterables”。
标签: java algorithm collections merge