質問

キーと値の関連付けがあるが、ハッシュを使用しない Java のクラスを探しています。私が現在やっていることは次のとおりです。

  1. に値を追加します Hashtable.
  2. のイテレータを取得します。 Hashtable.entrySet().
  3. すべての値を反復処理し、次のことを行います。
    1. 入手する Map.Entry イテレータの場合。
    2. タイプのオブジェクトを作成します Module (カスタム クラス) 値に基づきます。
    3. クラスを JPanel に追加します。
  4. パネルを見せてください。

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

私なら使用します ArrayList または Vector このためには、コードの後半で、 Module 指定されたキーのオブジェクト。 ArrayList または Vector.

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

ありがとう!

役に立ちましたか?

解決

私が提案するのは、 LinkedHashMap または TreeMap. 。あ LinkedHashMap キーは挿入された順序で保持されますが、 TreeMap を介してソートが維持されます Comparator または自然な Comparable 要素の順序。

要素をソートしておく必要がないため、 LinkedHashMap ほとんどの場合、より高速になるはずです。 TreeMap もっている O(log n) のためのパフォーマンス containsKey, get, put, 、 そして remove, Javadoc によれば、 LinkedHashMapO(1) それぞれに。

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

他のヒント

のLinkedHashMapは、マップの順序で要素キーセット(イテレートするとき、彼らはマップに挿入された)、のentrySet()または値を()を返します。

Map<String, String> map = new LinkedHashMap<String, String>();

map.put("id", "1");
map.put("name", "rohan");
map.put("age", "26");

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

これは、彼らがマップに入れた順序で要素を出力します。

id = 1
name = rohan 
age = 26 

不変マップがニーズに合う場合 というGoogleのライブラリがあります グアバ (こちらも参照 グアバの質問)

グアバ を提供します 不変マップ 信頼性の高いユーザー指定の反復順序を使用します。これ 不変マップ containsKey、get のパフォーマンスは O(1) です。明らかに、挿入と削除はサポートされていません。

不変マップ オブジェクトは、エレガントな静的コンビニエンス メソッドのいずれかを使用して構築されます。 の() そして のコピー() または ビルダー 物体。

を維持できます。 Map (高速検索用) および List (注文のため)でも、 LinkedHashMap 最も単純かもしれません。試してみることもできます SortedMap 例えば TreeMap, 、任意の順序を指定できます。

それがオープンソースである場合は、

私は知りませんが、少しグーグルでの後、私は<のhref =「http://www.java2s.com/Code/Java/Collections-Data-Structure/ArrayMapextendsAbstractMap.htm」が見つかりrel = "nofollowをnoreferrer"> ArrayListのに使って地図のこの実装。事前に1.5のJavaのようですので、あなたは簡単であるべき、それを汎用化したい場合があります。これはあなたがとにかくいけない、この実装はO(N)のアクセス権を持っていることに注意してください、しかし、あなたはあなたのJPanelにウィジェットの数百を追加しない場合、これは問題になることはありません。

あなたはhref="http://www.softwaremonkey.org/Code/LinkedTree" rel="nofollow noreferrer">ツリーマップの実装をリンクされた私の

事前にわかっている物事の自然な順序を維持する必要があるときは、常に、 EnumMap

キーは列挙型になり、任意の順序で挿入できますが、反復する場合は列挙型の順序 (自然な順序) で反復されます。

また、EnumMap を使用する場合、衝突がない方が効率的です。

enumMap を使用すると、きれいに読みやすいコードになることがわかりました。ここにあります

使用できます リンクされたハッシュマップ マップ内のメインの広告掲載オーダーへ

Java LinkedHashMap クラスに関する重要な点は次のとおりです。

  1. ユニークな要素のみが含まれています。
  2. LinkedHashmapには、キー3.に基づいた値が含まれています。4.HashMapと同じですが、代わりに挿入順序を維持します

    public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> 
    

ただし、ユーザー定義オブジェクトまたはプリミティブデータ型キーを使用してマップ内の値を並べ替える必要がある場合は、次を使用する必要があります ツリーマップ 詳細については、を参照してください。 このリンク

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top