Java Collections binarySearch()
binarySearch()是Java Collections 类的内置方法,该方法返回已排序对象的位置清单。有
两种不同类型的Java集合
binarySearch()方法,可以根据其参数进行区分。
这些是:
Java集合binarySearch(List
> list, T key)
Java集合binarySearch(List
list, T key, Comparator
c)
Java集合binarySearch(List
> list, T key)
此方法用于在提供的列表中搜索使用二进制搜索算法指定的对象。在进行方法调用之前,必须根据指定的自然数将列表按升序排序。如果列表未排序,则结果不确定。
Java集合binarySearch(List
list, T key, Comparator
c)
此方法用于搜索提供的使用二进制搜索算法查找指定对象的列表。在进行方法调用之前,必须根据指定的比较器将列表按升序排序。
语法
以下是
binarySearch( )方法:
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
参数
参数 |
说明 |
必需/可选 |
list |
由用户指定要搜索。 |
必需 |
key |
这是在提供的列表中要搜索的键。 |
必需 |
c |
它是用于对列表进行排序的比较器。 |
必需 |
返回
方法 |
返回 |
binarySearch(List
> list, T key) |
它以升序排序列表返回键的索引。 |
binarySearch(List
list, T key, Comparator
c) |
它返回比较器c定义的顺序的排序列表中键的索引。 |
异常
ClassCastException -如果列表中的元素不能相互比较或搜索键不能相互比较,则会引发异常
兼容性版本
Java 1.5及更高版本
示例1
import java.util.*;
public class CollectionsBinarySearchExample1 {
public static void main(String[] args) {
//Create list
ArrayList<String> arrlist = new ArrayList<String>();
arrlist.add("A");
arrlist.add("B");
arrlist.add("C");
arrlist.add("D");
//Search the list for key 'D'
int index = Collections.binarySearch(arrlist, "D");
System.out.println("index 'D' is available at position: "+index);
}
}
输出:
index 'D' is available at position: 3
示例2
import java.util.*;
public class CollectionsBinarySearchExample2 {
public static void main(String[] args) {
//Create list
ArrayList<Integer> arrlist = new ArrayList<Integer>();
arrlist.add(10);
arrlist.add(-20);
arrlist.add(30);
arrlist.add(-40);
arrlist.add(50);
//Print List
System.out.println("Provided List are: "+arrlist);
//Search the list for key '-20'
int index = Collections.binarySearch(arrlist, -20, Collections.reverseOrder());
System.out.println("Index '-20' is available at position: "+index);
}
}
输出:
Provided List are: [10, -20, 30, -40, 50]
Index '-20' is available at position: -4
示例3
import java.util.*;
public class CollectionsBinarySearchExample3 {
public static void main(String[] args) {
//Create list
ArrayList<Integer> arrlist = new ArrayList<Integer>();
arrlist.add(10);
arrlist.add(-20);
arrlist.add(30);
//Print List
System.out.println("Provided List are: "+arrlist);
System.out.print("Enter the search key: ");
Scanner sc = new Scanner (System.in);
String key = sc.next();
int index = Collections.binarySearch(arrlist, key, Collections.reverseOrder());
System.out.println("Search Key is available at position: "+index);
sc.close();
}
}
输出:
Provided List are: [10, -20, 30]
Enter the search key: D
Exception in thread "main" java.lang.ClassCastException: java.base/java.lang.Integer cannot be cast to java.base/java.lang.String
at java.base/java.lang.String.compareTo(String.java:124)
at java.base/java.util.Collections$ReverseComparator.compare(Collections.java:5140)
at java.base/java.util.Collections$ReverseComparator.compare(Collections.java:5131)
at java.base/java.util.Collections.indexedBinarySearch(Collections.java:333)
at java.base/java.util.Collections.binarySearch(Collections.java:321)
at myPackage.CollectionBinarySearchExample3.main(CollectionBinarySearchExample3.java:16)
示例4
import java.util.*;
public class CollectionsBinarySearchExample4 {
public static void main(String[] args) {
//Create list
ArrayList<Integer> arlist = new ArrayList<Integer>();
arlist.add(5);
arlist.add(4);
arlist.add(2);
arlist.add(1);
arlist.add(3);
Collections.sort(arlist);
//Search for key
int index = Collections.binarySearch(arlist, 4, null );
System.out.println("4 is available at index: "+index);
}
}
输出:
4 is available at index: 3
示例5
import java.util.*;
public class CollectionsBinarySearchExample5 {
public static void main(String[] args) {
//Create a list
List<Domain> list = new ArrayList<Domain>();
list.add(new Domain(10, "www.lidihuo.com"));
list.add(new Domain(20, "www.sssit.com"));
list.add(new Domain(30, "www.hindi100.com"));
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(list, new Domain(10, null), c);
System.out.println("Available at index: " + index);
//Searching an item with key 5
index = Collections.binarySearch(list, new Domain(5, null), c);
System.out.println("Found at index: " +index);
}
}
//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);
}
}
输出:
Available at index: 0
Found at index: -1