545

キーと値の関連付けを持つ Java のクラスを探していますが、ハッシュは使用していません。これが私が現在行っていることです:

  1. に値を追加しますHashtable
  2. の反復子を取得しますHashtable.entrySet()
  3. すべての値を反復し、次のことを行います。
    1. Map.Entryイテレータの aを取得します。
    2. Module値に基づいてタイプのオブジェクト (カスタム クラス) を作成します。
    3. クラスを JPanel に追加します。
  4. パネルを表示します。

これに関する問題は、値を取得する順序を制御できないため、指定された順序で値を表示できないことです (順序をハードコーディングしなければ)。

ArrayListこれにはorを使用しますVectorが、コードの後半で、特定の Key のオブジェクトを取得する必要がありますが、これはorModuleでは実行できません。ArrayListVector

これを行う無料/オープンソースのJavaクラス、またはHashtable追加されたときに基づいて値を取得する方法を知っている人はいますか?

ありがとう!

4

8 に答える 8

834

LinkedHashMapまたは をお勧めしTreeMapます。ALinkedHashMapは挿入された順序でキーを保持しますが、 aは a または要素の自然順序付けによってTreeMapソートされます。ComparatorComparable

要素を並べ替えるLinkedHashMap必要がないため、ほとんどの場合は高速になります。Javadocs によると、は、、、およびのパフォーマンスをTreeMap備えていますが、はそれぞれのパフォーマンスを備えています。O(log n)containsKeygetputremoveLinkedHashMapO(1)

特定の並べ替え順序ではなく、予測可能な並べ替え順序のみを期待する API の場合は、これら 2 つのクラスが実装するインターフェイスを使用することを検討してNavigableMapくださいSortedMap。これにより、特定の実装を API に漏らさず、後でそれらの特定のクラスまたは完全に異なる実装に自由に切り替えることができます。

于 2009-03-25T21:23:12.067 に答える
19

不変のマップがニーズに合っている場合は、 guavaと呼ばれる Google のライブラリがあります ( guava の質問も参照してください) 。

Guavaは、信頼できるユーザー指定の反復順序を持つImmutableMapを提供します。このImmutableMapは、containsKey、get に対して O(1) のパフォーマンスを発揮します。明らかに、put と remove はサポートされていません。

ImmutableMapオブジェクトは、洗練された便利な静的メソッドof()およびcopyOf()またはBuilderオブジェクトのいずれかを使用して構築されます。

于 2010-08-27T15:50:04.070 に答える
6

Map(高速ルックアップ用)およびList(順序用)を維持できますが、aLinkedHashMapが最も簡単な場合があります。SortedMapまた、 egを試すこともTreeMapできます。これは、指定した順序になります。

于 2009-03-26T21:04:45.507 に答える
1

オープンソースかどうかはわかりませんが、少し調べてみると、ArrayListを使用してこのMapの実装を見つけました。1.5より前のJavaのようですので、一般化することをお勧めします。これは簡単なはずです。この実装にはO(N)アクセスがあることに注意してください。ただし、JPanelに何百ものウィジェットを追加しなくても、これは問題にはなりません。

于 2009-03-25T21:29:45.357 に答える