【发布时间】:2010-02-13 17:42:38
【问题描述】:
我正在寻找一个具有 C++ std::map 常用实现特性的 Java 类(据我了解,自平衡二叉搜索树):
- 插入/删除/搜索的 O(log n) 性能
- 每个元素都由唯一的键和映射的值组成
- 键遵循严格的弱排序
我正在寻找具有开源或设计文档的实现;我可能最终会推出自己对原始键/值的支持。
这个问题的风格类似于:Java equivalent of std::deque,其答案是“ArrayDeque from Primitive Collections for Java”。
【问题讨论】:
-
为什么需要一棵保存原语的树?为什么不直接使用 TreeMap(它是一棵红黑树)?如果你找到一棵可以保存原语的树,那么仍然会有一种 Node 类:即。它不仅仅是您要实例化的原语。
-
你需要原始的keys还是原始的values?如果值,我同意 Bart:只需使用
TreeMap(或 CSLM 或其他)并使用装箱(因为您首先必须装箱才能将其放入树中)。如果您只想要原始键,Scala 库有scala.collection.immutable.IntMap和类似的LongMap,它们采用Int(即 javaint)或Long(即 javalong)作为原始键。您可以使用 Scala 库而不需要花费太多的 Java 精力——但如果标准库足够了,为什么还要花费那么多精力呢? -
@Bart K.:我正在使用原始键和值,对于大多数应用程序,直接存储原始数据的集合将需要更少的空间并产生显着的性能提升。为了回答您的第二点,不需要 Node 类;流行的数据结构一般都有数组实现。 -
看看这个问题的最新编辑;原始键/值并不是这个问题的真正要求,这应该为更多答案开辟了可能性。
-
@Rudiger,数组在 Java 中也是一个对象。但一开始我不应该那么担心性能。至少在您分析您的应用程序并确认大部分时间用于在树中添加(或删除)内容之前。
标签: java collections binary-tree stdmap