0

「a」変数で SomeObj の LinkedList を並べ替えるバブル ソート機能があります。同時に "b" 変数でリストを並べ替えたい場合はどうすればよいですか? bで別の関数を書く代わりに何ができますか?

public static void BubbleSort(LinkedList<SomeObj> objs) {
    int len = objs.size();

    for(int pass = 1; pass < len; pass++) {
        for (int i=0; i < len - pass; i++) {
            if(objs.get(i).a > objs.get(i + 1).a) {
                SomeObj p = objs.get(i);
                objs.set(i,objs.get(i+1));
                objs.set(i + 1, p);
            }
        }
    }
}
4

7 に答える 7

4

クラスにComparator インターフェイスを実装し、その比較メソッドを使用します。これは 2 つのオブジェクトを受け取り、それらを比較して -ve、0、+ve 値を返し、より小さい、等しい、またはより大きいことを示します。

この Comparator のオブジェクトを作成し、それをバブル ソート メソッドに渡し、その比較メソッドを使用して 2 つのオブジェクトを比較します。

オブジェクトには、そのようなすべてのフィールドのゲッターが必要です。

また、オブジェクトの比較基準を変更したいときはいつでも、別の Comparator を使用してください。

この を確認してください。

于 2012-05-26T22:56:35.533 に答える
2

SomeObj にComparableインターフェイスを実装させてから、そのインターフェイスを使用して並べ替えを行います。

于 2012-05-26T22:55:01.027 に答える
2

最初の「a」でソートする良い方法があれば、次に「b」で SomeObj クラスに Comparable を実装し、a と b の両方で比較する compareTo メソッドを作成します。http://www.javapractices.com/topic/TopicAction.do?Id=10

于 2012-05-26T22:57:26.563 に答える
1

優先順位が最も高いものを決定します。優先度の高い変数を確認してください。それらが異なる場合は、それのみを並べ替えているかのように並べ替えてください。優先度の高い変数が一致する場合は、優先度の低い変数に戻り、それを基に全体を比較する必要があります。

if (obj1.getA() != obj2.getA()) {
    // do compare on As
    // e.g. return onj2.getA() - obj1.getA()
}
else { // A's match, so do compares on B
    // e.g. return obj2.getB() - obj1.getB()
}
于 2012-05-26T22:55:23.120 に答える
1

これを行う最も簡単な方法は、リスト項目ではなく変数値を交換することだと思います。このアプローチを使用すると、リストをさまざまな方法で同時に「並べ替える」ことができます。

于 2012-05-26T22:58:16.047 に答える
1

一種の誤解があると思います-それはaでソートしてからbでソートすることではなく、2つのリストを1つにまとめたものであり、ユーザーは両方を個別にソートしたいが、2番目のリストを作成せずに、または私は正しくない?

于 2012-05-26T23:02:45.160 に答える
1

リストの並べ替えには、使用できます

Collections.sort(List list, Comparator c));

このメインメソッドのように

class Pair{
    int a;
    int b;

    public Pair(int a, int b) {
        this.a=a;
        this.b=b;
    }

    public String toString() {
        // TODO Auto-generated method stub
        return "["+a+","+b+"]";
    }

    //test
    public static void main(String[] args) {
        Comparator<Pair> comparatorA=new Comparator<Pair>() {
            @Override
            public int compare(Pair o1, Pair o2) {
                if (o1.a>o2.a) return 1;
                if (o1.a<o2.a) return -1;
                return 0;
            }
        };
        LinkedList<Pair> list=new LinkedList<>();
        list.add(new Pair(1,2));
        list.add(new Pair(2,1));
        list.add(new Pair(3,1));
        list.add(new Pair(1,3));

        Collections.sort(list, comparatorA);
        System.out.println(list);
    }
}

これで、b 値のコンパレーターを作成し、そのコンパレーターで Collections.sort を使用できます。

于 2012-05-26T23:10:22.220 に答える