java 自定义类型比较大小

来源:互联网 发布:彩票开奖数据api 编辑:程序博客网 时间:2024/05/19 11:19

如果是自己写了一个class 作数据类型需要比较大小则需implements Comparable 接口, 并在class 中重写compareTo()方法,例如:

public class A implements Comparable<A>{

……

public A(double s){score=s;}

private double score;
    /**
     * @return the score
     */
    public double getScore() {
        return score;
    }

………

@Override
    public int compareTo(A o) {
        int compare = 0;
    double result = this.getScore()-o.getScore();
    if (result > 0){
        compare =1;
    }
    else if(result <1){
        compare = -1;
    }
    return  compare;
    }

………………

}

然后在其他地方,就可以直接比较类型为A的对象大小或者排序:

/**
     * @param args
     */
    public static void main(String[] args) {

List<A> test= new ArrayList<A>();

test.add(new A(2.1));

test.add(new A(33.1));

test.add(new A(2.189));

Collections.sort(test);

}

==============================================

也可重写已有的比较方法,新的class implements Comparator,并重写compare() 方法。下面的例子重写了整数比较方法,从而直接将PriorityQueue 变为maxHeap最大堆(其默认实现是minHeap最小堆):

public class MaxHeapComparator implements Comparator<Integer>{
    @Override
    public int compare(Integer o1, Integer o2) {
        if (o1 < o2) return 1;
        else if (o1 == o2) return 0;
        else return -1;
    }
}

在其他程序里用最大堆:

maxHeapComparator = new MaxHeapComparator();

PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(20, maxHeapComparator);

或者从大到小排序:

int[] testArray= {2,4,6,1,76,4,99};

Arrays.sort(testArray, maxHeapComparator);

原创粉丝点击