1. ホーム
  2. java

[解決済み] Mapを実装し、挿入順序を保持するJavaクラス?

2022-03-18 18:14:15

質問

javaで、ハッシュを使わずにキーと値の関連付けをするクラスを探しています。 以下は、私が現在行っていることです。

  1. に値を追加します。 Hashtable .
  2. のイテレータを取得します。 Hashtable.entrySet() .
  3. すべての値を繰り返し、。
    1. を取得します。 Map.Entry をイテレータに使用します。
    2. 型のオブジェクトを作成します。 Module (カスタムクラス) の値に基づいています。
    3. JPanelにクラスを追加します。
  4. パネルを表示します。

この場合の問題は、値を取得する順番をコントロールできないので、(順番をハードコーディングしないと)指定された順番で値を表示できないことです。

私なら ArrayList または Vector を取得する必要があります。 Module オブジェクトを使用することはできません。 ArrayList または Vector .

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

ありがとうございます。

解決方法は?

を提案します。 LinkedHashMap または TreeMap . A LinkedHashMap はキーを挿入した順番で保持するのに対し TreeMap を経由してソートされた状態で保持されます。 Comparator または自然な Comparable の順番に並べます。

要素をソートしておく必要がないため LinkedHashMap の方が速いはずです。 TreeMap があります。 O(log n) の性能 containsKey , get , put および remove であるのに対し、Javadocsによると LinkedHashMapO(1) をそれぞれ使用します。

もしあなたのAPIが、特定のソート順ではなく、予測可能なソート順だけを期待しているのなら、これら二つのクラスが実装するインターフェースの使用を検討してみてください。 NavigableMap または SortedMap . これにより、特定の実装をAPIに漏らさず、後からその特定のクラスか全く別の実装に自由に切り替えられるようになります。