我正在制作一个java应用程序,它将存储一堆随机单词(可以随时添加到应用程序中或从应用程序中删除)。我想快速查找以查看给定单词是否在字典中。什么是最好的java数据结构用于此?截至目前,我正在考虑使用hashMap,并使用相同的单词作为值和该值的键。这是常见做法吗?对于(键,值)对中的键和值使用相同的字符串对我来说似乎很奇怪,所以我想确保没有更好的想法,我忽略了。
我还在考虑使用treeMap来保持单词排序,给我一个O(lgn)查找时间,但hashMap应该给出预期的O(1)查找时间,因为我理解它,所以我认为会更好。
所以基本上我只是想确保hashMap想法与字符串加倍,因为每个(键,值)对中的键和值都是一个很好的决定。感谢。
答案 0 :(得分:8)
我希望快速查找以查看给定单词是否在字典中。什么是最好的java数据结构用于此?
这是Set
的教科书用例。您可以使用HashSet
。 Set<T>
的朴素实现使用相应的Map<T, Object>
来简单地标记条目是否存在。
答案 1 :(得分:1)
如果你将它存储为字典中的单词集合,我建议你看看Tries.它们需要的内存少于Set
,并且可以快速查找最坏情况O(string length)
。
答案 2 :(得分:0)
任何Set
的课程都应该有助于您的目的。但是,请注意Set
不允许重复。就此而言,即使Map
也不允许重复密钥。如果你需要添加重复的条目并将它们视为单独的,我建议你使用一个ArrayList
(假设不需要同步)。
答案 3 :(得分:0)
我唯一关心的是内存,如果你使用HashSet,如果你有一个非常大的单词集合......那么你将不得不将整个集合加载到内存中...如果那不是问题.. ..(并且你的集合必须非常大才能成为一个问题)...然后HashSet应该没问题......如果你确实有一个非常大的单词集合,那么你可以尝试使用一个树,只在内存中加载你感兴趣的部分。
另外请记住,插入速度很快,但没有树中那么快,请记住,为了实现这一点,Java将插入每个排序的元素。同样,没什么大不了的,但是如果你一次添加很多单词,你可以考虑使用树......