2012-12-15 22 views
10

特定の順序でHashMapを設定しましたが、奇妙な順序で反復処理されています。HashMapの反復処理が設定されています

以下のコードを考えてみてください:

HashMap<String, String> map = new HashMap<String, String>(); 
map.put("ID", "1"); 
map.put("Name", "the name"); 
map.put("Sort", "the sort"); 
map.put("Type", "the type"); 

... 

for (String key : map.keySet()) { 
    System.out.println(key + ": " + map.get(key)); 
} 

と結果:

Name: the name 
Sort: the sort 
Type: the type 
ID: 1 

私はエントリを入れているために、それを反復処理する必要があります。 助けていただければ幸いです。

+3

LinkedHashMapを使用してください。http://stackoverflow.com/questions/683518/java-class-that-implements-map-and-keeps-insertion-order –

+1

*未定義*の順序で反復されます。 Javadocを参照してください。注文する場合は、それを提供するMap実装を使用してください。 – EJP

答えて

18
順序はあなたが奇妙な何かをした場合を除き、ほとんどがランダムになるだろうされ、挿入されたキーで hashCode()関数の結果に依存

(:さらに挿入の順番を覚えてLinkedHashMapHashMapを交換してください一貫性がある)。あなたが探しているものは、LinkedHashMap

のようなソートマップです。詳細については、hashtablesがここでどのように機能するかを少し調べてください。

20

これは、HashMapの内部動作の仕組みです。

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