Collections.binarySearch返回负整数

时间:2014-11-24 14:12:05

标签: java

以下代码搜索不正确... 请尽快帮助..

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

class Car{

    public int speed;

    public Car(int speed){
        this.speed = speed;
    }
}

class Compare implements Comparator<Car>{

    public int compare(Car C1, Car C2) {

        if(C1.speed < C2.speed)
            return -1;
        else
            return 1;

    }

}

public class Main{  
    public static void main(String[] args){

        Car c ;

        ArrayList<Car> a = new ArrayList<Car>();

        for(int i = 0 ; i < 5 ; i++){
                a.add(new Car(i));
        }

        Collections.sort(a, new Compare());

        System.out.println(Collections.binarySearch(a, new Car(0), new Compare()));

    }
}

我将输出视为一些负数。

1 个答案:

答案 0 :(得分:1)

您的比较器不正确。如果两辆车的速度相同,它应该返回0。

按照编码,如果A的速度与B相同,A > B如果您使用compare(A, B)B > A如果您使用compare(B, A),则明显违反比较合同。

由于比较器从未将汽车视为与另一辆汽车相等,因此二元搜索从未找到任何等于汽车搜索的汽车,因此返回负值,如文档所述。