【发布时间】:2014-02-10 22:21:10
【问题描述】:
我是 Hashtables 的新手,正在尝试了解它们如何充分发挥作用。我需要确定一个字符串是否出现在一个包含大约 100,000 个字符串的大文件中,每个字符串都在自己的行中。有人告诉我,HashTable 比 LinkedList 或 ArrayList 更有效,因为两者的运行时间都是 O(n)。
我已经查看了 Java 中的 HashTable 类,但由于“put”方法需要一个键以及对象,我不明白我将如何准确地从文件中输入每个字符串。
我想我可以使用 Scanner 来遍历文件中的每个字符串,但是如何将它们输入到 Hashtable 中,以及如何在 HashTable 中使用 contains() 方法?
【问题讨论】:
-
不要使用
Hashtable,而是使用由HashMap支持的Map。 -
为您的情况使用
HashSet,它再次使用散列,但它只需要值,而不是键。尽管HashMap的性能比旧版Hashtable好得多,后者只是为了向后兼容。 -
这里是the documentation
HashSet。 -
@AmirPashazadeh 实际上,您需要的是密钥,而不是值。输入的 值 将用于支持
Map<Key, Boolean>。 -
@AmirPashazadeh 参考
Collections#newSetFromMap(Map<E, Boolean>)