SortedSetやTreeMapのように、Javaでリストをソートしましたか?オブジェクトのリストとしてプロパティの1つを持つクラスがあります。このリストは、追加時またはセッター(set(List list))を使用して設定するときにいつでもソートする必要があります。
リスト用のTreeMapのようなコンポーネントはありますか?どんな提案や助けも本当に感謝するでしょう。前もって感謝します。
SortedSetやTreeMapのように、Javaでリストをソートしましたか?オブジェクトのリストとしてプロパティの1つを持つクラスがあります。このリストは、追加時またはセッター(set(List list))を使用して設定するときにいつでもソートする必要があります。
リスト用のTreeMapのようなコンポーネントはありますか?どんな提案や助けも本当に感謝するでしょう。前もって感謝します。
リストを作成する目的は、追加された要素の順序を維持することです。List
したがって、要素が追加されるときに要素がソートされるような実装はないと思います。
メソッドを使用Collections.sort()
して、いつでもリストを並べ替えることができます。
必要なのは、 GoogleGuavaのようなソートされたBag/MultiSet実装ですか?TreeMultiSet
グアバのATreeMultiSet
は次のように定義されます。
自然な順序または明示的なコンパレータのいずれかに従って、要素の順序を維持するマルチセット。
ここMultiSet
で:
Setのように、順序に依存しない同等性をサポートするコレクションですが、要素が重複している可能性があります。マルチセットは、バッグと呼ばれることもあり ます。
MultiSetsの詳細については、Google Guavaのこのdzoneの記事を読むことができます:MultiSets(あなたが本当に必要な場合を除いて)、および新しいコレクションタイプを説明するTreeMultiSet
Guavawikiのこのページ。
Collection
要素の順序(の必須プロパティ)を気にしないため、他のデータ型を使用できますList
。たとえば、SortedSet
重複がない場合は、これでうまくいくと思います。
それ以外の場合は、で使用できCollections.sort()
ますList
。
既存のを拡張してArrayList
を作成できますSortedList
。あなたは挿入中に注文の世話をする必要があるだけなので。
public class SortedList<E extends Comparable<E>> extends ArrayList<E> {
@Override
public boolean add(E e) {
int index = Collections.binarySearch(this, e);
super.add(index < 0 ? ~index : index, e);
return true;
};
}
JavaDocCollections.binarySearch
戻り値:検索キーがリストに含まれている場合は、そのインデックス。それ以外の場合、
(-(insertion point) - 1)
。挿入ポイントは、キーがリストに挿入されるポイントとして定義されます。キーより大きい最初の要素のインデックス、またはリスト内のすべての要素が指定されたキーより小さい場合はlist.size()です。>= 0
これにより、キーが見つかった場合にのみ戻り値が返されることが保証されることに注意してください。
更新:
@Louis Wassermanが指摘しているように、これは、インデックスに基づいて要素を挿入する基本的なリストコントラクトに問題を引き起こします。その機能をサポートしたい場合は、を使用する必要がありますCollections.sort()
。org.apache.commons.collections.list.TreeList
また、そのクラスに対する相対的なパフォーマンス統計を下回るものを使用することもできます
get add insert iterate remove
TreeList 3 5 1 2 1
ArrayList 1 1 40 1 40
LinkedList 5800 1 350 2 325
List
Java SDKには、ソートされたクラスがありません。必要なものに対する最も簡単な解決策は、何かを追加Collections.sort()
するList
たびに呼び出すことです。