【发布时间】:2017-08-12 12:23:41
【问题描述】:
我正在尝试创建一个程序来扫描文本文件的文件夹,分隔每个单词,并将它们添加到 ArrayList。用户可以搜索单个单词,程序将输出该单词存在于哪个文档中。我最初的目标是使用 HashMap,但我想知道是否还有其他更好或同样好的数据结构。
- 对这个特定程序使用哈希映射有什么好处?
- 还有哪些其他数据结构可以解决这个问题?
【问题讨论】:
标签: java data-structures collections hashmap
我正在尝试创建一个程序来扫描文本文件的文件夹,分隔每个单词,并将它们添加到 ArrayList。用户可以搜索单个单词,程序将输出该单词存在于哪个文档中。我最初的目标是使用 HashMap,但我想知道是否还有其他更好或同样好的数据结构。
【问题讨论】:
标签: java data-structures collections hashmap
如果要查找性能,HashMap 是一种更好的解决方案。
您还可以使用Google Guava Multimap,其中多个值与单个键相关。就像<Key, List<Value>> 的地图一样。但是使用 Multimap 后代码看起来更简洁。
您也可以使用SetMultimap。 SetMultimap 不能保存重复的键值对。添加一个已经在 multimap 中的键值对将不起作用。
【讨论】:
对于这个任务,我会推荐一个HashMap<word, Set<text-file>,滥用Java 通用语法。其中 word 为 key,一组相关文本文件为 value
为什么是 HashMap?
HashMap或Map提供O(1)的查找和添加时间。
为什么要设置内部地图?
同一个词可以存在于多个文本文件中。
另外,如果文档中记录了同一个词,Set数据结构不会存储重复值,.contains和.add方法为O(1)
使用HashMap,当您尝试查找每个键时将花费您O(1)(假设您的哈希表正常工作)而其他实现可能至少花费您O(log n)
如果您打算同时执行此任务,ConcurrentHashMap 将成为您的朋友
【讨论】: