Java 使用树映射而不是属性

Java 使用树映射而不是属性,java,hashmap,Java,Hashmap,我有一个非常大的带有i18n资源包的属性文件。它看起来像: button.browse=Browse button.cancel=Cancel button.clear=Clear 请注意,键是可排序的,具有类似的前缀,我不希望有重复项。 然后通过java.util.properties加载属性文件,并使用get()进行查询,但从未更新。 由于属性文件扩展了一个过时的Hastable,我想使用其他Map类来获得更好的性能。我可以使用更多内存,但我需要尽快获取值。 默认情况下,我们总是使用Has

我有一个非常大的带有i18n资源包的属性文件。它看起来像:

button.browse=Browse
button.cancel=Cancel
button.clear=Clear
请注意,键是可排序的,具有类似的前缀,我不希望有重复项。 然后通过java.util.properties加载属性文件,并使用get()进行查询,但从未更新。 由于属性文件扩展了一个过时的Hastable,我想使用其他Map类来获得更好的性能。我可以使用更多内存,但我需要尽快获取值。 默认情况下,我们总是使用HashMap,但据我所知,如果有很多条目,它将使用节点作为树映射。也许我可以用树形图来代替


是否有更适合此类数据的映射实现?例如,使用来自键的前缀树或类似的东西的HashMap仅对具有相同hashcode的条目的bucket使用tree。对于这样的本地化字符串,预计不会有很多这样的字符串。所以hashmap在这里更好

类似的问题有一个很好的答案……如果您担心性能,请测量。运行分析器。优化工作应该与您的程序在那里花费的时间成比例……您不太可能与语言项发生大量的哈希冲突。如果有很多项,则哈希冲突是一个问题。Java使用64位哈希,因此即使您有40亿个语言项,发生冲突的可能性也只有40%。有这么多值的降级还不错,因为bucket仍然很小。hashCode()返回32位整数,但无论如何,我明白了你的意思:hashmap将执行得更好,因为它对具有冲突节点的bucket使用树映射