与C++;地图? 我正在寻找一个java C++类,它具有C++ STD的特点::MAP的通常实现(我理解,一个自平衡二进制搜索树): O(日志n)插入/删除/搜索的性能 每个元素由一个唯一键和一个映射值组成 键遵循严格的弱顺序

与C++;地图? 我正在寻找一个java C++类,它具有C++ STD的特点::MAP的通常实现(我理解,一个自平衡二进制搜索树): O(日志n)插入/删除/搜索的性能 每个元素由一个唯一键和一个映射值组成 键遵循严格的弱顺序,java,collections,binary-tree,stdmap,Java,Collections,Binary Tree,Stdmap,我正在寻找开源或设计文档的实现;我可能最终会支持基本键/值 这个问题的风格类似于:,其答案是“Java原始集合中的ArrayDeque” 标准Java库中与二叉树最接近的类是Java.util.TreeMap,但它不支持基元类型,除非通过装箱(即int包装为整数,double包装为double,等等) 对于大型映射,java.util.HashMap可能提供更好的性能。理论上它是O(1),但它的精确性能特性取决于密钥类的哈希代码生成算法 根据:“数组……是唯一支持存储基本数据类型的集合。”您也可

我正在寻找开源或设计文档的实现;我可能最终会支持基本键/值


这个问题的风格类似于:,其答案是“Java原始集合中的ArrayDeque”

标准Java库中与二叉树最接近的类是Java.util.TreeMap,但它不支持基元类型,除非通过装箱(即int包装为整数,double包装为double,等等)

对于大型映射,java.util.HashMap可能提供更好的性能。理论上它是O(1),但它的精确性能特性取决于密钥类的哈希代码生成算法


根据:“数组……是唯一支持存储基本数据类型的集合。”

您也可以查看commons集合

我怀疑你会发现很多集合支持基本类型而不需要装箱,所以就接受它吧。这不一定是必要的,因为

如果你真的想使用原语(在做了性能不足的基准测试之后!),你可以查看
FastTreeMap
的来源,并添加处理原语的方法。

是一个有跳过列表支持的排序映射(一个具有O(logn)性能的自平衡树状结构)。通常,CSLM上的边界比TreeMap(一个自平衡的红黑树impl)更紧,因此它可能会执行得更好,附带的好处是线程安全和并发,而TreeMap不是。在JDK1.6中添加了CSLM

有一组基本类型的集合和一些常见Java集合类型的其他有趣变体


其他感兴趣的集合库包括和。

答案可能会在Java集合框架之外找到。(+1)我想说,使用
TreeMap
,为什么需要一个包含原语的树?为什么不使用树形图(红黑树)?如果你发现一棵树可以保存原语,那么仍然会有一种节点类:即,你实例化的不仅仅是原语。你需要原语键还是原语值?如果是值,我同意Bart:只需使用
TreeMap
(或CSLM或其他)并使用装箱(因为您首先必须装箱到节点中才能将其放入树中)。如果您只需要基本键,Scala库具有
Scala.collection.immutable.IntMap
和类似的
LongMap
,它们将
Int
(即java
Int
)或
Long
(即java
Long
)作为基本键。您可以使用Scala库,而无需Java付出太多的努力——但如果标准库足够,为什么还要付出那么多的努力呢?
@Bart K.:
我使用的是基元键和值,对于大多数应用程序,直接存储基元的集合将需要更少的空间并产生显著的性能提升。要回答第二点,不需要节点类;流行的数据结构通常有数组实现;基本键/值并不是这个问题的真正要求,这应该为更多的答案提供了可能。@Rudiger,数组在Java中也是一个对象。但一开始我不应该太担心性能。至少在您分析应用程序并确认大部分时间都花在添加(或删除)树中的内容之前是这样。TreeMap(即红黑树)实际上就是答案(尽管我重写了rbtree it的一个版本,以使用原语和数组)。。。对不起,伙计们;当我问这个问题时,我有点醉了,没有意识到答案就在我眼前。