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