Map を実装し、挿入順序を維持する Java クラス?
-
22-08-2019 - |
質問
キーと値の関連付けがあるが、ハッシュを使用しない Java のクラスを探しています。私が現在やっていることは次のとおりです。
- に値を追加します
Hashtable
. - のイテレータを取得します。
Hashtable.entrySet()
. - すべての値を反復処理し、次のことを行います。
- 入手する
Map.Entry
イテレータの場合。 - タイプのオブジェクトを作成します
Module
(カスタム クラス) 値に基づきます。 - クラスを JPanel に追加します。
- 入手する
- パネルを見せてください。
これの問題は、値を取得する順序を制御できないため、(順序をハードコーディングしない限り) 指定された順序で値を表示できないことです。
私なら使用します ArrayList
または Vector
このためには、コードの後半で、 Module
指定されたキーのオブジェクト。 ArrayList
または Vector
.
これを行う無料/オープンソースの Java クラス、またはオブジェクトから値を取得する方法を知っている人はいますか? Hashtable
追加された時期に基づいていますか?
ありがとう!
解決
私が提案するのは、 LinkedHashMap
または TreeMap
. 。あ LinkedHashMap
キーは挿入された順序で保持されますが、 TreeMap
を介してソートが維持されます Comparator
または自然な Comparable
要素の順序。
要素をソートしておく必要がないため、 LinkedHashMap
ほとんどの場合、より高速になるはずです。 TreeMap
もっている O(log n)
のためのパフォーマンス containsKey
, get
, put
, 、 そして remove
, Javadoc によれば、 LinkedHashMap
は O(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
を維持できます。 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にウィジェットの数百を追加しない場合、これは問題になることはありません。
使用できます リンクされたハッシュマップ マップ内のメインの広告掲載オーダーへ
Java LinkedHashMap クラスに関する重要な点は次のとおりです。
- ユニークな要素のみが含まれています。
LinkedHashmapには、キー3.に基づいた値が含まれています。4.HashMapと同じですが、代わりに挿入順序を維持します
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
ただし、ユーザー定義オブジェクトまたはプリミティブデータ型キーを使用してマップ内の値を並べ替える必要がある場合は、次を使用する必要があります ツリーマップ 詳細については、を参照してください。 このリンク