在哪里可以找到Java中基于Trie的标准映射实现?[已关闭]

2022-08-31 12:42:07

我有一个Java程序,它存储了从字符串到各种对象的大量映射。

现在,我的选择是要么依靠哈希(通过HashMap)要么依靠二进制搜索(通过TreeMap)。我想知道在流行和高质量的馆藏库中是否有高效且标准的基于trie的地图实现?

我过去写过自己的,但我宁愿选择标准的东西,如果有的话。

快速澄清:虽然我的问题是一般性的,但在当前项目中,我正在处理大量由完全限定的类名或方法签名索引的数据。因此,有许多共享前缀。


答案 1

答案 2

核心 Java 库中没有 trie 数据结构。

这可能是因为trys通常被设计为存储字符串,而Java数据结构更通用,通常包含任何(定义相等和哈希操作),尽管它们有时仅限于对象(定义顺序)。“符号序列”没有常见的抽象,尽管适用于字符串,我想你可以对其他类型的符号做一些事情。ObjectComparableCharSequenceIterable

还有一点需要考虑:当试图在Java中实现传统的trie时,你很快就会遇到Java支持Unicode的事实。要获得任何类型的空间效率,您必须将 trie 中的字符串限制为某些符号子集,或者放弃将子节点存储在按符号索引的数组中的传统方法。这可能是为什么trys被认为不够通用,无法包含在核心库中的另一个原因,如果您实现自己的库或使用第三方库,则需要注意一些事情。


推荐