以下代码搜索不正确... 请尽快帮助..
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()));
}
}
我将输出视为一些负数。
答案 0 :(得分:1)
您的比较器不正确。如果两辆车的速度相同,它应该返回0。
按照编码,如果A的速度与B相同,A > B
如果您使用compare(A, B)
,B > A
如果您使用compare(B, A)
,则明显违反比较合同。
由于比较器从未将汽车视为与另一辆汽车相等,因此二元搜索从未找到任何等于汽车搜索的汽车,因此返回负值,如文档所述。