java.util.Collections.binarySearch()方法是一个java.util.Collections类方法,该方法返回对象在排序列表中的位置。
// Returns index of key in sorted list sorted in // ascending order public static int binarySearch(List slist, T key) // Returns index of key in sorted list sorted in // order defined by Comparator c. public static int binarySearch(List slist, T key, Comparator c) If key is not present, the it returns "(-(insertion point) - 1)". The insertion point is defined as the point at which the key would be inserted into the list.
如果list的元素与指定的比较器不具有可比性,或者该元素的搜索关键字不可替代,则该方法将引发ClassCastException。
在按升序排序的列表中搜索int键:
// Java program to demonstrate working of Collections.
// binarySearch()
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class GFG
{
public static void main(String[] args)
{
List al = new ArrayList();
al.add(1);
al.add(2);
al.add(3);
al.add(10);
al.add(20);
// 10 is present at index 3.
int index = Collections.binarySearch(al, 10);
System.out.println(index);
// 13 is not present. 13 would have been inserted
// at position 4. So the function returns (-4-1)
// which is -5.
index = Collections.binarySearch(al, 13);
System.out.println(index);
}
}
输出:
3 -5
在以降序排列的列表中搜索int键。
// Java program to demonstrate working of Collections.
// binarySearch() in an array sorted in descending order.
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class GFG
{
public static void main(String[] args)
{
List al = new ArrayList();
al.add(100);
al.add(50);
al.add(30);
al.add(10);
al.add(2);
// The last parameter specifies the comparator method
// used for sorting.
int index = Collections.binarySearch(al, 50,
Collections.reverseOrder());
System.out.println("Found at index " + index);
}
}
输出:
Found at index 1
搜索用户定义的类对象的列表:
// Java program to demonstrate working of Collections.
// binarySearch() in a list of user defined objects
import java.util.*;
class Binarysearch
{
public static void main(String[] args)
{
// Create a list
List<Domain> l = new ArrayList<Domain>();
l.add(new Domain(10, "quiz.geeksforgeeks.org"));
l.add(new Domain(20, "practice.geeksforgeeks.org"));
l.add(new Domain(30, "code.geeksforgeeks.org"));
l.add(new Domain(40, "www.geeksforgeeks.org"));
Comparator<Domain> c = new Comparator<Domain>()
{
public int compare(Domain u1, Domain u2)
{
return u1.getId().compareTo(u2.getId());
}
};
// Searching a domain with key value 10. To search
// we create an object of domain with key 10.
int index = Collections.binarySearch(l,
new Domain(10, null), c);
System.out.println("Found at index " + index);
// Searching an item with key 5
index = Collections.binarySearch(l,
new Domain(5, null), c);
System.out.println(index);
}
}
// A user-defined class to store domains with id and url
class Domain
{
private int id;
private String url;
// Constructor
public Domain(int id, String url)
{
this.id = id;
this.url = url;
}
public Integer getId()
{
return Integer.valueOf(id);
}
}
输出:
0 -1
数组.binarysearch() vs Collections.binarySearch()
Arrays.binarysearch()适用于也可以是原始数据类型的数组。 Collections.binarysearch()适用于ArrayList和LinkedList之类的对象集合。
重要事项:
- 如果输入列表未排序,则结果不确定。
- 如果有重复项,则不能保证将找到哪一个。
- 对于ArrayList之类的“random access”列表,此方法以log(n)时间运行。如果指定的列表未实现RandomAccess接口且很大,则此方法将执行基于迭代器的二进制搜索,该搜索执行O(n)链接遍历和O(log n)元素比较。
相关用法
- Java Java lang.Long.byteValue()用法及代码示例
- Java Java lang.Long.numberOfTrailingZeros()用法及代码示例
- Java Java.util.Collections.rotate()用法及代码示例
- Java Java lang.Long.lowestOneBit()用法及代码示例
- Java Java.util.Collections.disjoint()用法及代码示例
注:本文由纯净天空筛选整理自 Collections.binarySearch() in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。