Map インタフェースの実装クラスである LinkedHashMap、TreeMap、HashMap がキーを保持する順序はそれぞれ以下の通りである。
LinkedHashMap:
キーを格納した順に保持。
TreeMap:
キーの昇順に保持。
HashMap:
順序を保持しない。
上記を実際にプログラムを作成して検証する。
まずは、以下のようなクラスを作成。
class MapLabo { MapLabo(Map<String, String> aMap) { this.map = aMap; return; } void putValue() { this.map.put("3", "みかん"); this.map.put("1", "いちご"); this.map.put("2", "りんご"); this.map.put("6", "ぶどう"); this.map.put("4", "だいこん?"); this.map.put("5", "ばなな"); return; } void dump() { System.out.println(this.map.getClass().getName() + " の内容:"); Iterator<String> _ite = this.map.keySet().iterator(); while (_ite.hasNext()) { String _key = _ite.next(); System.out.println(_key + " :[" + this.map.get(_key) + "]"); } System.out.println(); return; } void experiment() { this.putValue(); this.dump(); return; } //*** メンバ変数 private Map<String, String> map; }
上記クラスは、コンストラクタにて Map クラスのインスタンスを受け取り、そのインスタンスに対して putValue() メソッドにてキーおよび値の追加を行い、dump() メソッドにてキーと値の組み合わせを標準出力に表示する。
呼び出す方法は以下の通り。
new MapLabo(new LinkedHashMap<String, String>()).experiment(); new MapLabo(new TreeMap<String, String>()).experiment(); new MapLabo(new HashMap<String, String>()).experiment();
実行結果は以下の通り。
java.util.LinkedHashMap の内容: 3 :[みかん] 1 :[いちご] 2 :[りんご] 6 :[ぶどう] 4 :[だいこん?] 5 :[ばなな] java.util.TreeMap の内容: 1 :[いちご] 2 :[りんご] 3 :[みかん] 4 :[だいこん?] 5 :[ばなな] 6 :[ぶどう] java.util.HashMap の内容: 3 :[みかん] 2 :[りんご] 1 :[いちご] 6 :[ぶどう] 5 :[ばなな] 4 :[だいこん?]
LinkedHashMap は格納した順番にキーを保持している。
TreeMap は昇順にキーを保持している。
HashMap の順序は不定であり、実行するたびに出力順序が異なる。