compare方法如何处理返回值?在Comparator类中


Collections.sort(list, new Comparator<Data>(){
          public int compare(Data obj1, Data obj2){
              return (obj1.value > obj2.value) ? -1: (obj1.value > obj2.value) ? 1:0 ;
          }
    });

我用这段代码对一个列表进行非升序排序,这个方法可以工作,但我不明白它是如何在内部工作的。

这段代码如何处理返回值-1,1,0 ?

为什么这个方法比较相同的东西(obj1.value > obj2.value)两次?

list是一个ArrayList类型的引用变量,其中包含Data类型的对象,Data类如下所示

private static class Data{
    private String key;
    private int value;
    public Data(String key, int value){
        this.key = key;
        this.value = value;
    }
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }
}

正如一位评论者所说,您的比较方法编码不正确。第一个比较应该是<,而不是>。如果您要阅读Comparator<T> https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html的Javadocs,您将看到,如果第一个参数在第二个参数之前,它应该返回一个负值,如果它们相等,则返回0,如果第一个参数在第二个参数之后,则返回一个正值。

相关内容

  • 没有找到相关文章

最新更新