如何从JAVA中的1000万随机名称列表中搜索名称?

时间:2011-07-18 10:54:25

标签: java search

我有一个arraylist,可以包含1000万随机名称。搜索名称最有效的算法是什么?

3 个答案:

答案 0 :(得分:3)

虽然你有足够的内存 - 排序你的列表o(n * log(n))而不是使用二进制搜索o(ln(n))。

List<String> yourNames = ...;
Collections.sort(yourNames);
...

int pos = Collections.binarySearch(yourNames, "tanmoy biswas");
if ( pos < 0 ) { 
  System.out.println("Not found");
}

当你要OOM

// before sort or do the intern during load of the data
for(int i = 0; i < yourNames.size(); i++) {
    yourNames.set(i, yourNames.get(i).intern());
} 

答案 1 :(得分:2)

在无序列表中搜索效率不高。以下是您提高复杂程度的选择:

  1. 您可以做的第一件事就是对列表进行排序。这将允许您跨数据运行二进制搜索。您可以在O(log(n))时间内找到完全匹配或前缀匹配。
  2. 更进一步:将数据加载到HashSet。哈希集非常善于找到完全匹配,但几乎没有其他功能。
  3. 考虑使用索引数据甚至Lucene的数据库。这是首选方案,因为它提供了最广泛的搜索。

答案 2 :(得分:2)

如果没有进一步的信息,我将不得不假设你想要一套

List<String> list =
Set<String> set = new HashSet<String>(list);

// to perform a lookup. This is O(1)
boolean isInArray = set.contains(wordToSearchFor);