我有一个文本文件,其中包含一个排序的单词列表作为我的字典。
我想使用TreeMap
以便将 log(n)作为平均成本,当我必须查看单词是否属于字典时(即{ {1}})。
我已经读过在containsKey
幕后的Black-Read树,所以它是自我平衡的。
我的问题是:将TreeMap
与单词列表一起提供的最佳方式是哪种方式?
我的意思是:用一个排序列表喂它应该是二叉树的最坏情况,因为它必须平衡几乎所有其他单词,避风港呢?
单词列表的数量可以从7K到150K不等。
答案 0 :(得分:1)
TreeMap
隐藏了它的实现细节,正如优秀的OO设计所规定的那样,所以要真正优化你的用例可能会很难。
但是,如果在将所有项目添加到TreeMap
之前将其读入数组/列表是一个选项,则可以添加它们"在内部":列表的中间元素将成为根,所以首先添加它,然后以相同的方式递归地添加前半部分和后半部分。实际上,这是TreeMap(SortedMap)
构造函数遵循的策略。
如果不是读取所有项目的选项,我认为除了简单地将条目连续地放入地图,或者编写自己的树实现以便您可以更好地控制如何生成它之外别无选择。如果你至少事先知道了项目的数量,你应该能够生成一个平衡的树而不必重新平衡。
如果您不需要TreeMap
的额外功能,您可能还会考虑使用HashMap
,它(对于您的密钥具有良好的哈希函数)甚至具有O(1)访问权限。