##[Java]HashMap,TreeMap,LinkedHashMapのセットした値の保持順
Mapにはいくつか種類があるけど、格納した値がどの順番で保持されるか(どの順番で出力されるか)違いがある。よく見る(個人的に)Mapたちのそれをまとめた。
どのMapを使うかはこの特徴の違いで選ぶことが多い気がする。
HashMap | TreeMap | LinkedHashMap |
---|---|---|
順序不定 | keyの昇順 | 登録順 |
以下、確認してみた。
test.java
public static void main(String[] args) {
final int key = 0;
final int value = 1;
HashMap<String,String> hashMap = new HashMap<String,String>();
TreeMap<String,String> treeMap = new TreeMap<String,String>();
LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap<String,String>();
String[][] keyValue = {{"Japan","America","China","Korea","India"},
{"Tokyo","Washington D.C.","Beijing","Seoul","New Delhi"}};
for(int i = 0; i < keyValue[key].length; i++) {
hashMap.put(keyValue[key][i], keyValue[value][i]);
treeMap.put(keyValue[key][i], keyValue[value][i]);
linkedHashMap.put(keyValue[key][i], keyValue[value][i]);
}
System.out.println("HashMap の結果を出力!");
for(String hashMapKey : hashMap.keySet()) {
System.out.println( hashMapKey +" の首都は "+ hashMap.get(hashMapKey) + " です。");
}
System.out.println();
System.out.println("TreeMap の結果を出力!");
for(String treeMapKey :treeMap.keySet()) {
System.out.println( treeMapKey +" の首都は "+ treeMap.get(treeMapKey) + " です。");
}
System.out.println();
System.out.println("LinkedHashMap の結果を出力!");
for(String linkedHashMapKey : linkedHashMap.keySet()) {
System.out.println( linkedHashMapKey +" の首都は "+ linkedHashMap.get(linkedHashMapKey) + " です。");
}
}
実行結果
HashMap の結果を出力!
Japan の首都は Tokyo です。
China の首都は Beijing です。
America の首都は Washington D.C. です。
Korea の首都は Seoul です。
India の首都は New Delhi です。
TreeMap の結果を出力!
America の首都は Washington D.C. です。
China の首都は Beijing です。
India の首都は New Delhi です。
Japan の首都は Tokyo です。
Korea の首都は Seoul です。
LinkedHashMap の結果を出力!
Japan の首都は Tokyo です。
America の首都は Washington D.C. です。
China の首都は Beijing です。
Korea の首都は Seoul です。
India の首都は New Delhi です。
よって、HashMapは順序不定、TreeMapはkeyの昇順(今回はアルファベットの昇順)、LinkedHashMapは登録順になっていることを確認した。
まぁでも毎回忘れちゃうんですよね。