【发布时间】:2014-07-15 03:19:40
【问题描述】:
假设我有一个对象集合:
List<String> myList = populateMyArrayList();
//Here I am having an ArrayList with 1000 elements
哪种方法更好:
1 : 合并排序然后二分查找
Collections.sort(myList);
int keyIndex = Collections.binarySearch(myList, key);
2:顺序搜索
for(String s : myList){
if(s.equals(key)){
return s;
}
}
根据要搜索的集合的大小,搜索方法是否应该有所不同?如果是,那么如何决定。
EDIT1:假设我必须搜索列表几次,并且列表中不会添加新元素。
EDIT2:我本来可以选择HashSet,但实际上我有一个List<CustomObject>,我可以根据CustomObject 的不同属性多次搜索List。所以我的 CustomObject 中不能有一个被覆盖的 equals 方法
【问题讨论】:
-
第一种方法将在 O(nlogn) 时间内运行(由于排序),而线性搜索的运行时间为 O(n)。
-
当然是线性搜索。 O(n) 与 O(nlogn + logn) = O(nlogn)
-
别忘了
myList.contains(key)。 -
我觉得这个问题更适合Programmers SE
-
您要在列表中搜索多少次?您要插入多少次项目?除非你对这些问题有一个明确的答案,否则我们给你的任何答案都是毫无意义的。
标签: java collections binary-search mergesort linear-search