12

名前と値のペアで定義された多数のオブジェクトコレクションがあります。それらの値にすばやくアクセスし、名前のアルファベット順に並べて返すことができるようにする必要があります。最初に、HashMap を使用して高速アクセスを取得する可能性があると考えました。しかし、それは私に注文を与えませんでした。LinkedHashSet に切り替えることにしました。 問題は、リストの適切な場所に新しいオブジェクトを挿入
できるようにする必要があることですが、LinkedHashSet ではそれが許可されていません。また、名前だけでなくインデックスでもオブジェクトにアクセスできる必要があります。 どんなアイデアにも感謝します。

4

6 に答える 6

23

TreeSetを試してみませんか。あなたのリストは重複を許可していませんか? もしそうなら、セットは問題ないはずです。文字列を追加していて、これが Comparator を実装すると、セットは自動的にソートされます

もしあなたが持っていたら

Set<String> s = new TreeSet<String>();
s.add("B");
s.add("C");
s.add("A");

その場合、セットの内容は A、B、C になります

于 2012-09-07T08:51:01.277 に答える
13

ツリーマップを使用できます

赤黒木ベースの NavigableMap 実装。マップは、使用されるコンストラクターに応じて、キーの自然順序付けに従って、またはマップ作成時に提供される Comparator に従ってソートされます。

于 2012-09-07T08:49:49.067 に答える
1

コンパレータを使用できます。

    Collections.sort(yourCollection, new Comparator() {

    public int compare(YourObject o1, YourObject o2) {
         // put Comparesion according to your requirement 
        return AnyObject;
    }
});
于 2012-09-07T08:54:28.930 に答える
1

SortedSet である TreeSet を使用します。名前に基づいてカスタムクラスを Comparable として定義する必要があり、コレクションは常にソートされます。

注: ソートされたコレクションのアクセス時間は O(log N) です。

于 2012-09-07T08:50:02.390 に答える
0

ATreeMapはお客様の要件に対応する必要があります。キーがリテラルでない場合は、適切なComparatorTreeMap コンストラクターを使用してください。

于 2012-09-07T08:51:38.930 に答える
0

TreeMapを見たことがありますか?これは、順序を維持するのに役立つ赤黒ツリーに基づいていますが、それでも高速アクセスを提供します。

于 2012-09-07T08:50:08.797 に答える