1

我在java中使用这个函数:

Collections.sort(an Arraylist, new CustomComparator);

CustomComparator 类中的 compare 方法将返回一个 int。这对排序过程意味着什么?这个值的数量是多少,将如何影响排序过程?

更具体地说,我想在比较方法中比较两个值。这是我的代码:

    import java.util.Comparator;

    public abstract class CustomComparator implements Comparator<HLine> {
        @Override
        public int compare(HLine hl1, HLine hl2) {
            return hl1.y < hl2.y;
        }
    } 

我呼吁进行排序:

    Collections.sort(hlines, new comparator());

hlines 是一个包含一个 Point 和两个双精度对象的 Arraylist。我想比较两个对象中的第二个双精度数。

4

2 回答 2

0

基本上,如Comparator.compareComparable.compareTo的 Javadoc 中所述,这些方法返回

作为第一个参数的负整数、零或正整数小于、等于或大于第二个参数。

意思是如果你打电话

new Integer(1).compareTo(0)

它将返回一个负整数,表示 0 必须排在 1 之前。

new Integer(1).compareTo(1)

它将返回 0,这表明两个值必须在同一级别上排序。

new Integer(1).compareTo(2)

它将返回一个正整数,表示 2 必须排在 1 之后。

要修复您的代码示例,您需要重写compare()以便它返回 a Integer,因为它现在返回 aboolean并且不会编译。

因为您正在尝试比较doubles 您可以简单地更改为

    @Override
    public int compare(HLine hl1, HLine hl2) {
        return hl1.y - hl2.y;
    }
于 2013-08-25T14:27:53.950 回答
-1

sort() 方法对元素进行排序,但首先将它们进行比较。为了进行比较,sort() 方法可以使用 compare() 或 compareTo() 方法。

现在,如果您只想根据一个属性对元素进行排序,请使用可比较接口的 compareTo() 方法。

如果要根据多个元素对元素进行排序,请使用比较器接口的 cmopare() 方法。

于 2013-08-25T15:21:03.563 回答