Javaでよく使うMap(Set)のキー(要素)順序の比較
よく忘れるのでまとめておく。
HashMap(HashSet) | 速い。キー(要素)の順番は保障されない。 |
TreeMap(TreeSet) | キー(要素)を自然順序付けで保持。コンストラクタに比較用オブジェクトを渡すことも出来る。 |
LinkedHashMap(LinkedHashSet) | キー(要素)を入れた順番のまま保持。 |
キー(要素)の順番はイテレータを使うときに影響。
以下Mapの場合の例
import java.util.Map; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.TreeMap; public class MapComparison { public static void main(String[] args) { putAndPrintNumbers(new HashMap<String, String>()); putAndPrintNumbers(new LinkedHashMap<String, String>()); putAndPrintNumbers(new TreeMap<String, String>()); } /** * 受け取ったマップに"key9"から"key0"まで順にキーを入れたあと出力。 * * @param map 空のマップ */ public static void putAndPrintNumbers(Map<String, String> map) { for (int j = 0; j < 10; j++) { map.put("key" + (9 - j), "value"); } System.out.println(map.getClass().getName()); for (String key : map.keySet()) { System.out.print(key + ","); } System.out.println(); } }
実行結果
java.util.HashMap key4,key3,key6,key5,key0,key2,key1,key8,key7,key9, // バラバラ java.util.LinkedHashMap key9,key8,key7,key6,key5,key4,key3,key2,key1,key0, // 入れた順 java.util.TreeMap key0,key1,key2,key3,key4,key5,key6,key7,key8,key9, // 辞書順