java - 在Java中保存集合最有效的方法是什么?

标签 java data-structures collections

目前,我有一个存储自定义 Node 类的 LinkedList。当前按顺序删除节点并进行评估,这通常会将更多节点添加回 LinkedList,将其视为队列。

但实际上我并不关心维护节点的顺序,因为添加或删除它们的顺序并不重要。您可以从列表中删除第 1 个、第 54 个或第 1032 个节点,这并不重要。重要的是节点正在快速处理,这意味着一个节点被删除(随机)、变异,然后连同它的几个变体一起添加回来(同样,顺序并不重要)。

由于我一直无法找到 Java Bag 实现,维护此类集合的最有效方法是什么?

PS 出于懒惰,我避免使用数组,因为理论上节点集合的大小范围可以从 1 个节点到 3^64 个节点,尽管它更有可能保持在 100 万以下。

最佳答案

Java HashSetTreeSet 类型在这里可能会很好,因为它们表示支持快速插入和删除元素的无序元素集合。也就是说,您不可能在内存中保存 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/

相关文章:

algorithm - 给定一个随机顺序的整数数组,你必须找到最小交换次数才能将其转换为循环排序数组

Java 集合 : which collection to use and when?

java - 按日期对具有 itemBean 的列表进行排序?

c# - 寻找循环列表解决方案

java - 如果我真的需要它,我可以在 Java 中使用 thread.stop() 吗?

java - 声明变量的区别

java - JTextPane/JScrollPane显示问题

java - 了解解决资源分配问题的子集总和

c++ - 如何保持最相关项目的大型优先级队列?

java - 什么是类似于哈希表的数据结构,但是不常用的键被删除了?