从已排序的元素列表构建Java树映射

从已排序的元素列表构建Java树映射,java,treemap,Java,Treemap,我有一个文本文件,其中包含一个单词的排序列表,这是我的字典 我想使用TreeMap,以便在我必须查看某个单词是否属于词典(即containsKey)时,将log(n)作为平均成本 我读到过黑色读取树位于树映射的幕后,因此它是自平衡的 我的问题是:向TreeMap提供单词列表的最佳方式是什么 我的意思是:对于二叉树来说,给它提供一个排序列表应该是最糟糕的情况,因为它必须平衡几乎所有其他单词,不是吗 单词列表的数量从7K到150K不等 TreeMap隐藏了它的实现细节,正如好的OO设计所规定的那样,

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

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

我读到过黑色读取树位于
树映射的幕后,因此它是自平衡的

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

我的意思是:对于二叉树来说,给它提供一个排序列表应该是最糟糕的情况,因为它必须平衡几乎所有其他单词,不是吗


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

TreeMap
隐藏了它的实现细节,正如好的OO设计所规定的那样,因此为您的用例进行真正的优化可能会很困难

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

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


如果您不需要代码< > TeMeMAP的额外特性,您也可以考虑使用<代码> HashMap < /C> >,(对于您的键给出了一个很好的哈希函数),甚至有O(1)访问。

这个代码> TeMeMAP中的值是什么?听起来你只需要一个
TreeSet
(在幕后,它只是一个
TreeMap
,其中所有的值都是相同的虚拟值)你是对的。即使没有平衡,排序列表也会“花费”O(n)馈送为什么要使用
TreeMap
?你可以简单地使用
ArrayList
集合。binarySearch
@Mureinik:我说的你完全正确,很好(我甚至不记得TreeSet)。我需要这个值作为规则,我可以从stem得到不同的屈折。@DAle:这一点也很好。但假设我只需要树形图,我的重点是从一个排序的列表开始,哪一个是最好的输入方式。实际上,我必须阅读所有的列表,然后将它们放入树中,因此开销将是“仅”一个大小为n/2的数组来执行此操作(执行前半部分,然后添加,然后使用相同的数组执行第二部分),我喜欢它。至于HashMap,对于泛型字符串,是否存在足够好的hash函数?