【问题标题】:Different data structures for inverted index implementation倒排索引实现的不同数据结构
【发布时间】:2017-08-12 12:23:41
【问题描述】:

我正在尝试创建一个程序来扫描文本文件的文件夹,分隔每个单词,并将它们添加到 ArrayList。用户可以搜索单个单词,程序将输出该单词存在于哪个文档中。我最初的目标是使用 HashMap,但我想知道是否还有其他更好或同样好的数据结构。

  • 对这个特定程序使用哈希映射有什么好处?
  • 还有哪些其他数据结构可以解决这个问题?

【问题讨论】:

标签: java data-structures collections hashmap


【解决方案1】:

如果要查找性能,HashMap 是一种更好的解决方案。

您还可以使用Google Guava Multimap,其中多个值与单个键相关。就像<Key, List<Value>> 的地图一样。但是使用 Multimap 后代码看起来更简洁。

您也可以使用SetMultimap。 SetMultimap 不能保存重复的键值对。添加一个已经在 multimap 中的键值对将不起作用。

【讨论】:

    【解决方案2】:

    对于这个任务,我会推荐一个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 将成为您的朋友

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多