Zee*_*han 3 java collections mergesort binary-search linear-search
假设我有一个对象集合:
List<String> myList = populateMyArrayList();
//Here I am having an ArrayList with 1000 elements
Run Code Online (Sandbox Code Playgroud)
哪种方法更好:
1:Mergesort然后二进制搜索
Collections.sort(myList);
int keyIndex = Collections.binarySearch(myList, key);
Run Code Online (Sandbox Code Playgroud)
2:顺序搜索
for(String s : myList){
if(s.equals(key)){
return s;
}
}
Run Code Online (Sandbox Code Playgroud)
根据要搜索的集合的大小,搜索方法是否应该有所不同?如果是,那么如何决定.
EDIT1:假设我必须多次搜索列表,并且列表中不会添加任何新元素.
编辑2:我本可以去HashSet,但我实际上有一个List<CustomObject>,我可以List根据CustomObject的不同属性多次搜索.所以equals我的CustomObject中没有重写的方法
Abs*_*ind 11
这取决于.
O(n)O(logn + n*logn)哪个O(n*logn).所以,如果你正在检查ca. n字符串,这个更好.HashSet哪个元素O(1).LinkedHashSetPS过早优化是万恶之源.