List
提供されたものに基づいて順序を維持する Javaの既存の実装はありComparator
ますか?
次の方法で使用できるもの:
Comparator<T> cmp = new MyComparator<T>();
List<T> l = new OrderedList<T>(cmp);
l.add(someT);
someT
に従ってリスト内の順序が維持されるように挿入されますcmp
(@andersojの提案で、もう1つのリクエストで質問を完了しています)
また、要素を削除せずにソートされた順序でリストをトラバースできるようにしたい、つまり:
T min = Const.SMALLEST_T;
for (T e: l) {
assertTrue(cmp.compare(min, e) >= 0);
min = e;
}
通過する必要があります。
すべての提案は大歓迎です (Collections.sort
順序付けされていない完全なリストで使用するように私に指示することを除いて) が、現時点で新しいライブラリを導入するのは難しいため、java.*
最終的に何かを好むでしょう。org.apache.*
注: (UPDATE4)この種のリストの実装ではパフォーマンスが不十分になることに気付きました。2 つの一般的なアプローチがあります。
- Linked構造(一種の)Bツリーまたは類似のものを使用する
- 配列と挿入を使用する (二分探索あり)
いいえ 1. CPU キャッシュ ミスに問題があります。 いいえ 2. 配列内の要素のシフトに問題があります。
UPDATE2:
TreeSet
提供されたコンパレータ (MyComparator
) を使用して等しいかどうかをチェックし、それに基づいて要素が等しいと仮定してそれらを除外するため、機能しません。「一意性」フィルタリングではなく、順序付けのためだけにそのコンパレータが必要です(自然な順序付けによる要素は等しくないため)
UPDATE3:
「ソート」された順序でトラバースする方法がないためPriorityQueue
、(必要に応じて)機能しませんList
アップデート: