目前,我有一个存储自定义 Node 类的 LinkedList。当前按顺序删除节点并进行评估,这通常会将更多节点添加回 LinkedList,将其视为队列。
但实际上我并不关心维护节点的顺序,因为添加或删除它们的顺序并不重要。您可以从列表中删除第 1 个、第 54 个或第 1032 个节点,这并不重要。重要的是节点正在快速处理,这意味着一个节点被删除(随机)、变异,然后连同它的几个变体一起添加回来(同样,顺序并不重要)。
由于我一直无法找到 Java Bag 实现,维护此类集合的最有效方法是什么?
PS 出于懒惰,我避免使用数组,因为理论上节点集合的大小范围可以从 1 个节点到 3^64 个节点,尽管它更有可能保持在 100 万以下。
最佳答案
Java HashSet
或 TreeSet
类型在这里可能会很好,因为它们表示支持快速插入和删除元素的无序元素集合。也就是说,您不可能在内存中保存 364 个值,因为这大约为 3.4336838 × 1030,这个数字远远大于我所知道的任何 RAM 所能容纳的数量。
编辑:根据所描述的用例(支持有效插入和删除随机元素),您可能希望采用 described in this older question for building a data structure that does just that 方法。直观上,您将使用 ArrayList,然后通过将元素交换到 ArrayList 的末尾并删除它们来删除元素。这提供了 O(1) 插入和 O(1) 删除,并且开销极低。
希望这有帮助!
关于java - 在Java中保存集合最有效的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16431931/