java 中的binarySearch

来源:百度知道 编辑:UC知道 时间:2024/06/02 23:04:00
import java.util.*;

class CompareArray implements Comparator
{
public int compare(Object o1,Object o2)
{
Arr arr1 = (Arr)o1;
Arr arr2 = (Arr)o2;
return (arr1.x > arr2.x ? 1 :(arr1.x == arr2.x ? 0 : -1));
}
}

class Arr
{
int x;
int y;
public Arr(int i,int j)
{
x = i;
y = j;
}
public String toString()
{
return "x ="+x+",y ="+y;
}
}

class Test
{
public static void main(String args[])
{
CompareArray ca = new CompareArray();
Arr[] arr = {new Arr(1,2),new Arr(5,3),new Arr(2,6)};
for(int i = 0;i < arr.length;i ++)
System.out.println(arr[i]);
Arrays.sort(arr,ca);
for(int i = 0;i < arr.length;i ++)
System.out.println(arr[i]);

int i = Arrays.binarySearch(arr,5,ca);
System.out.println("for 5,i = " + i);

int i = Arrays.binarySearch(arr,5,ca); //这句话有错!
System.out.println("for 5,i = " + i);
i = Arrays.binarySearch(arr,3,ca);
//Arrays.binarySearch([]a,int from,int to, key)
System.out.println("for 3,i = " + i);
..
首先,可以确定你用的是java5以上的版本,因为public static <T> int binarySearch(T[] a,T key,Comparator<? super T> c)的第二个参数必须是对象,你给的是5.由于java5能自动装、拆箱,它帮你把5变成了new Integer(5)了,这就是错误信息了Integer类名出现的原因。
然后,public static <T> int binarySearch(T[] a,T key,Comparator<? super T> c),这个方法默认第二个参数和第一个数组参数的类型是同一个类型的。Integer(由5装箱而来)不是一个Arr,所以出错了。