Java.util.Collections 类

java.util.Collections.binarySearch() 方法用于使用二进制文件在指定列表中搜索指定对象搜索算法。在进行此调用之前,必须根据指定的比较器(如通过 sort(List, Comparator) 方法)将列表按升序排序。如果未排序,则结果不确定。如果列表包含多个等于指定对象的元素,则无法保证会找到哪一个。

语法

public static <T> int  binarySearch(List<? extends T> list, 
                                    T key, 
                                    Comparator<? super T> c)

这里,T是列表中元素的类型。

参数

list 指定要搜索的列表。
type 指定要搜索的键。
c 指定列表排序所依据的比较器。 null 值表示应使用元素的自然排序。

返回值

返回搜索键的索引,如果它包含在列表中;否则,(-(插入点) - 1)。插入点定义为将键插入到列表中的点:大于键的第一个元素的索引,或者如果列表中的所有元素都小于指定键,则为 list.size() 。请注意,这保证了当且仅当找到该键时,返回值将为 >= 0。

Exception

抛出 ClassCastException,如果列表包含使用指定比较器无法相互比较的元素,或者搜索关键字无法使用此比较器与列表中的元素相互比较。

示例:

在下面的示例中,java.util.Collections.binarySearch()方法用于在给定列表中搜索给定元素。

import java.util.*;

public class MyClass {
  public static void main(String[] args) {
    //创建List对象
    List<Integer> MyList = new ArrayList<Integer>();

    //填充列表
    MyList.add(50);
    MyList.add(40);
    MyList.add(30);
    MyList.add(20);
    MyList.add(10);

    //创建一个用于逆序排序的比较器
    Comparator<Integer> comp = Comparator.reverseOrder();

    //10 出现在索引 = 4 处(按相反顺序)
    int idx1 = Collections.binarySearch(MyList, 10, comp);
    System.out.println(idx1);

    //45 不在列表中。插入点45
    //将为 1(按相反顺序)。因此,返回 (-1-1) = -2
    int idx2 = Collections.binarySearch(MyList, 45, comp);
    System.out.println(idx2);
  }
}

上述代码的输出将是:

4
-2