1

私はJavaでこの関数を使用します:

Collections.sort(an Arraylist, new CustomComparator);

CustomComparator クラスの compare メソッドは int を返します。これはソート手順にとって何を意味するのでしょうか? この値の数は何ですか?また、並べ替え手順にどのように影響しますか?

具体的には、compare メソッドで 2 つの値を比較したいと考えています。これが私のコードです:

    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 と 2 つの double を持つオブジェクトの Arraylist です。2 つのオブジェクトの 2 番目の double を比較したい。

4

2 に答える 2

0

基本的に、 Comparator.compareおよびComparable.compareToの Javadoc に記載されているように、これらのメソッドは戻ります

最初の引数が 2 番目の引数より小さい、等しい、または大きい場合は、負の整数、ゼロ、または正の整数。

つまり、あなたが電話した場合

new Integer(1).compareTo(0)

負の整数を返します。これは、0 を 1 より前に並べる必要があることを示します。

new Integer(1).compareTo(1)

0 を返します。これは、両方の値を同じレベルで並べ替える必要があることを示します。

new Integer(1).compareTo(2)

1 の後に 2 を並べる必要があることを示す正の整数を返します。

compare()コードサンプルを修正するには、を返すように書き直す必要があります。Integer現在は を返し、booleanコンパイルされません。

sを比較しようとしているので、double単純に変更できます

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

sort() メソッドは要素を並べ替えますが、最初にそれらが比較されます。比較の目的で、sort() メソッドは compare() または compareTo() メソッドを使用できます。

ここで、1 つの属性のみに基づいて要素を並べ替えたい場合は、同等のインターフェイスの compareTo() メソッドを使用します。

複数の要素に基づいて要素を並べ替えたい場合は、コンパレータ インターフェイスの cmopare() メソッドを使用します。

于 2013-08-25T15:21:03.563 に答える