java - 从排序的元素列表构建 Java TreeMap

标签 java treemap

我有一个文本文件,其中包含一个排序的单词列表,作为我的字典。

我想使用 TreeMap 以便在我必须查看单词是否属于字典时将 log(n) 作为平均成本 (即 containsKey)。

我读过 Black-Read 树在 TreeMap 的幕后,所以它是 self 平衡的。

我的问题是:将单词列表提供给 TreeMap 的最佳方式是什么?

我的意思是:用排序列表喂养它应该是二叉树的最坏情况,因为它必须平衡几乎所有其他单词,不是吗?

单词列表的数量从 7K 到 150K 不等。

最佳答案

TreeMap 隐藏了它的实现细节,作为良好的 OO 设计规定,因此要真正针对您的用例进行优化可能会很困难。

但是,如果可以选择在将所有项添加到 TreeMap 之前将它们读入数组/列表,则可以“由内而外”添加它们:列表的中间元素将变为根,所以先加上它,然后用同样的方式递归地加上前半部分和后半部分。事实上,这就是 TreeMap(SortedMap) 构造函数遵循的策略。

如果读取所有项目不是一个选项,我认为您别无选择,只能简单地将您的条目连续放入 map ,或者编写您自己的树实现,以便您可以更好地控制如何生成它。如果您至少事先知道项目的数量,那么您应该能够生成一棵平衡树而无需重新平衡。

如果您不需要 TreeMap 的额外功能,您也可以考虑使用 HashMap,它(为您的键提供一个良好的哈希函数)甚至具有O(1) 访问。

关于java - 从排序的元素列表构建 Java TreeMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49017954/

相关文章:

java - 当应用程序从后台转到前台时,onBackPressed() 不起作用

java - 从 Android 异步嵌套类返回值

java - Gradle - 即使打包在 jar 中也无法加载 Java 类

java - 将元素放在 TreeMap 的末尾

java - 从 TreeMap 克隆对象中删除元素不会从 java 中的主树形图对象中删除

java - 适用于解析大数据文件的Java数据结构

java - 如何从 NetCDF 文件获取恒定时间和深度的单层纬度和经度?

java - 好的做法? REST 中的一两个对象模型用于创建和获取资源

java - 获取 TreeMap 中的特定值

java - 根据两个List的内容生成SortedMap