web-dev-qa-db-ja.com

挿入順序を維持する方法

キーと値のペアをハッシュテーブル(またはその他のコレクション)に追加したいのですが、挿入順序を維持する必要があります。これどうやってするの?

キーとして「1」を値として、「2」をキーとして、「2」を値として追加します。

出力は次のようになります。

1:one
2:two
28
sarah

重要な Map 実装の特徴的な違いは次のとおりです。

  • LinkedHashMap : "予測可能な反復順序を使用[...]これは通常、キーがマップに挿入された順序です(挿入順序) )」
  • HashMap : "マップの順序は保証されません"
  • TreeMap : "キーの自然順序付けに従って、またはComparatorによってソートされます"

したがって、この場合はLinkedHashMapが必要です。

ここに違いを説明するスニペットがあります。また、Mapのすべてのエントリを反復処理する一般的な方法と、インターフェイスを使用してオブジェクトを参照することで、実装の選択に大きな柔軟性を与える方法も示します。

import Java.util.*;
public class MapExample {
    public static void main(String[] args) {
        populateThenDump(new HashMap<String,Integer>());
        populateThenDump(new TreeMap<String,Integer>());
        populateThenDump(new LinkedHashMap<String,Integer>());
    }
    static void populateThenDump(Map<String,Integer> map) {
        System.out.println(map.getClass().getName());

        map.put("Zero",  0);
        map.put("One",   1);
        map.put("Two",   2);
        map.put("Three", 3);
        map.put("Four",  4);

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

上記のスニペットの出力は( ideone.comに表示 )です。

Java.util.HashMap          // unordered, results may vary
Three => 3
Zero => 0
One => 1
Four => 4
Two => 2
Java.util.TreeMap          // ordered by String keys lexicographically
Four => 4
One => 1
Three => 3
Two => 2
Zero => 0
Java.util.LinkedHashMap    // insertion order
Zero => 0
One => 1
Two => 2
Three => 3
Four => 4

関連する質問

同様の質問

60

ハッシュテーブルには、 LinkedHashMap クラスを使用します。

11

LinkedHashMapクラスを検索しています。

2
Pedantic