0

クラスを作成したことを並べ替えの実装に問題があります

 @Override
    public int compare(Object object1, Object object2) {

        try {
            Method method = object1.getClass().getDeclaredMethod("getStampDate");
            Date value = (Date) method.invoke(object1);

            Method method1 = object1.getClass().getDeclaredMethod("getStampDate");
            Date value1 = (Date) method.invoke(object2);

            //Date stamepDate1 = fetchStampDate(object1 );
            //Date stamepDate2 = fetchStampDate(object2);

            if(value != null && value1 != null )
            return compare(value, value1);
        } 

しかし、私が電話しているとき

public void columnsList(List<TableRecord> records){
    Collections.sort(records, new StampDateComparator());
}

コンパレーターは私が期待していることTableRecordを一度だけ呼び出し、日付変数を含みます。このソートメソッドは日付に基づいてソートしますが、コンパレーターは私が間違っていることを一度だけ呼び出しますか?

テストのために、リストに2つのレコードを追加しました

List<TableRecord> records = new ArrayList<TableRecord>();
records.add(new MyClass());
records.add(new MyClass1());

しかし、これは一度だけ呼び出されます

4

2 に答える 2

0

2 つの項目を比較するには、単一の比較のみが必要です。3 つの項目を試してみて、2 回呼び出されれば、すべてが適切に機能すると思います。

于 2013-09-25T09:08:08.067 に答える
0

リストに項目が 2 つしかない場合は、最初の比較自体でソートされるため、メソッドを 1 回だけ呼び出すことが有効です。

Collections.sort のソート アルゴリズムは、変更されたマージソートです(下位サブリストの最上位要素が上位サブリストの最下位要素より小さい場合、マージは省略されます)。このアルゴリズムは、n log(n) のパフォーマンスを保証します。この実装は、指定されたリストを配列にダンプし、配列をソートし、リストを反復処理して、配列内の対応する位置から各要素をリセットします。これにより、リンクされたリストをその場でソートしようとした結果生じる n2 log(n) パフォーマンスが回避されます。

于 2013-09-25T09:08:10.003 に答える