0

Comparator インターフェイスを実装するカスタム オブジェクトを持つ複数の ArrayList です。これらの複数のリストが同じオブジェクトを持つ可能性があります。私の要件は、各リストが独自の順序を持​​つことができることです

例:

リスト 1 には 4 つのオブジェクト Obj2、Obj4、Obj1、Obj3 を含めることができます リスト 2 には、たとえば 5 つのオブジェクト Obj4、Obj3、Obj5、Obj1、Obj2 を含めることができます

List1 の (0,1,2,3,4) の ID を各カスタム オブジェクトに割り当て、ArrayList で sort メソッドを使用すると、List が 1 つの場合にうまくいくと思います。

しかし、List2 では同じオブジェクトを異なる順序にする必要があるため、それはできません。ArrayList ごとに個別の順序リストを維持する代わりに、コンパレーターを使用して Collections フレームワークの並べ替えに依存する方法はありますか?

どんな助けでも大歓迎です。

ありがとう

4

3 に答える 3

1

カスタム コンパレータを作成してから、Collections.sort(list, comparison) を使用します。2 つ (または必要な数) のコンパレーターを使用して、異なるパラメーターに基づいてオブジェクトを並べ替えることができます。

于 2012-04-10T17:51:09.330 に答える
0

カスタムで作成されたコンパレータ impl を使用します。

Collections.sort(list, new Comparator<Comparable<?>>() {
        @Override
        public int compare(final Comparable o1, final Comparable o2) {
            // Compare two objects, might not be the same type
        }
    });

または、できれば、相互に比較されるすべてのクラスに共通のインターフェイスCustomComparableIntfを実装Comparable<CustomComparableIntf>してから実装し、具象型ではなく、そのインターフェイスの実装として比較されるようにします。

于 2012-04-10T17:52:25.670 に答える
0

リストを異なる順序で保存するには、このリストのコピーが必要です。複数の参照を 1 つのリストに保持するだけの場合、1 つの参照で並べ替えると、他の参照にも影響します。

1 つのリストのコピーが複数あることを心配する必要はありません。リスト自体にも参照用のコンテンツがあります。したがって、別のリストから新しいリストを作成すると、リストのコピーが作成されますが、リスト内の要素のコピーは作成されません。それらはリスト内の参照として保持され、何の影響も受けません。

于 2012-04-10T20:48:08.797 に答える