5

SortedSetやTreeMapのように、Javaでリストをソートしましたか?オブジェクトのリストとしてプロパティの1つを持つクラスがあります。このリストは、追加時またはセッター(set(List list))を使用して設定するときにいつでもソートする必要があります。

リスト用のTreeMapのようなコンポーネントはありますか?どんな提案や助けも本当に感謝するでしょう。前もって感謝します。

4

5 に答える 5

7

リストを作成する目的は、追加された要素の順序を維持することです。Listしたがって、要素が追加されるときに要素がソートされるような実装はないと思います。

メソッドを使用Collections.sort()して、いつでもリストを並べ替えることができます。

于 2012-11-05T16:29:52.737 に答える
2

必要なのは、 GoogleGuavaのようなソートされたBag/MultiSet実装ですか?TreeMultiSet

グアバのATreeMultiSetは次のように定義されます。

自然な順序または明示的なコンパレータのいずれかに従って、要素の順序を維持するマルチセット。

ここMultiSetで:

Setのように、順序に依存しない同等性をサポートするコレクションですが、要素が重複している可能性があります。マルチセットは、バッグと呼ばれることもあり ます。

MultiSetsの詳細については、Google Guavaのこのdzoneの記事を読むことができます:MultiSets(あなたが本当に必要な場合を除いて)、および新しいコレクションタイプを説明するTreeMultiSetGuavawikiのこのページ。

于 2012-11-05T16:40:09.580 に答える
0

Collection要素の順序(の必須プロパティ)を気にしないため、他のデータ型を使用できますList。たとえば、SortedSet重複がない場合は、これでうまくいくと思います。

それ以外の場合は、で使用できCollections.sort()ますList

于 2012-11-05T16:32:56.030 に答える
0

既存のを拡張して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
于 2012-11-05T16:49:36.003 に答える
-1

ListJava SDKには、ソートされたクラスがありません。必要なものに対する最も簡単な解決策は、何かを追加Collections.sort()するListたびに呼び出すことです。

于 2012-11-05T16:35:01.160 に答える