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

Building a Java TreeMap from a sorted list of elements

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

我想使用 TreeMap 以便在我必须查看某个单词是否属于字典或不是(即 containsKey)。

我听说黑读树在TreeMap的幕后,所以它是自我平衡的。

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

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

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

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

但是,如果可以选择在将所有项目添加到 TreeMap 之前将所有项目读入 array/list,则可以将它们添加到 "inside out":列表的中间元素会成为根,所以先加,然后用同样的方式递归加前半部分和后半部分。事实上,这就是 TreeMap(SortedMap) 构造函数遵循的策略。

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

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