いくつかの考慮事項: まず Comparator
、アイテムを並べ替えたいすべての注文にカスタムが必要です。Foo
オブジェクトがインスタンスであると仮定しましょう。
class FirstComparator implements Comparator<Foo> {
public int compareTo(Foo o1, Foo o2) {
...
}
}
class SecondComparator implements Comparator<Foo> {
public int compareTo(Foo o1, Foo o2) {
...
}
}
等々。
その後、 を使用してコレクションを簡単に並べ替えることができますCollections.sort(fooList, yourComparator)
。
ここでの問題は、多くのカスタム ソート順が必要であり、それらを動的に更新する必要があることです。ここで私が提案する最善の方法は、同じアイテムを含むさまざまなコレクションを、すでに順番に並べておくことです。
たとえば、次のようにすることで実行できます。
TreeMap<Foo> firstOrder = new TreeMap<Foo>(new FirstComparator<Foo>());
TreeMap<Foo> secondOrder = new TreeMap<Foo>(new SecondComparator<Foo>());
アイテムをセットに追加するときは、両方のコレクションに追加するだけで自動的に並べ替えられます。並べ替えを呼び出す必要はなく、要素を追加または削除すると動的に更新されます。唯一の追加の重みは、オブジェクトへの参照が 2 倍になることです。そのため、速度のためにスペースを交換しています。
ツリーに追加された後に列の値が変更された場合、これは機能しないことに注意してください。これは、TreeMap
明示的に呼び出す必要がある全体の再ソートが必要になるためです。マップ内の既存の要素のコンパレータ値を変更すると、それが無効になります。