Java比较器代码
public int compare(Integer a, Integer b) {
return a > b ? 1 : -1;
}
bug 点
Comparator的实现必须保证以下几点:
原则1. sgn(compare(x, y)) == -sgn(compare(y, x))
原则2. (compare(x, y) > 0) && (compare(y, z) > 0) 意味着 compare(x, z) > 0
原则3. compare(x, y) == 0 意味着对于任意的z:sgn(compare(x, z)) == sgn(compare(y, z)) 均成立
违背了原则1:假设x的value为1,x的value也为1;那么compare(X, Y) ≠ –compare(Y, X) ,故会抛出java.lang.IllegalArgumentException的异常
解决方式 由于业务不复杂就自己写了一个
Dataline 是自己业务里面的类 比较的点是 gongchengliang 你们可以自己替换
private static void QuickSort(List
//如果left等于right,即数组只有一个元素,直接返回
if(left>=right) {
return;
}
//设置最左边的元素为基准值
DataLine key=num.get(left);
double r=0;
try {
r= Double.valueOf(key.gongchengliang);
}catch (Exception e){
}
//数组中比key小的放在左边,比key大的放在右边,key值下标为i
int i=left;
int j=right;
while(i double x=0; double y=0; try { x=Double.valueOf(num.get(j).gongchengliang); }catch (Exception e){ } try { y=Double.valueOf(num.get(i).gongchengliang); }catch (Exception e){ } //j向左移,直到遇到比key大的值 while(x<=r && i j--; } //i向右移,直到遇到比key小的值 while(y>=r && i i++; } //i和j指向的元素交换 if(i DataLine dataLine=num.get(i); num.set(i,num.get(j)); num.set(j,dataLine); } } num.set(left,num.get(i)); num.set(i,key); QuickSort(num,left,i-1); QuickSort(num,i+1,right); }