【发布时间】:2016-12-29 03:32:36
【问题描述】:
问题:
本质上,我的目标是从文本文件构建 IndexEntry 对象的 ArrayList。 IndexEntry 具有以下字段:String word,表示文本文件中的这个唯一词,以及 ArrayList numsList,包含文本文件的行的列表,其中 单词出现。
我构建的 ArrayList 必须保持 IndexEntries 排序,以便它们的 word 字段按字母顺序排列。但是,我想以最快的方式做到这一点。目前,我访问文本文件中出现的每个单词,并使用二进制搜索来确定该单词的 IndexEntry 是否已经存在,以便将当前行号添加到其 numsList。在 IndexEntry 不存在的情况下,我会在适当的位置创建一个新的,以保持字母顺序。
示例:
_
一个
两个
一个
三个
_
将产生一个 IndexEntries 的 ArrayList,其输出为字符串(按 word、numsList 的顺序)是:
一个 [1, 5],三个 [7],两个 [3]
请记住,我正在处理更大的文本文件,其中包含许多相同的单词。
问题:
二分查找是解决这个问题的最快方法吗?我仍然是 Java 编程的新手,并且对搜索在这种情况下可能表现更好的算法或与我当前的解决方案相比使用哈希表的相对时间复杂度感到好奇。
【问题讨论】:
-
首先尝试使用
Map而不是List。它将提供恒定的时间查找性能。构建地图后,将其转换为您的愿望清单。 -
Java 已经有一个类。你想要一个
Map<String, Set<Integer>>。