我有一个arraylist,可以包含1000万随机名称。搜索名称最有效的算法是什么?
答案 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)
在无序列表中搜索效率不高。以下是您提高复杂程度的选择:
HashSet
。哈希集非常善于找到完全匹配,但几乎没有其他功能。答案 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);