ハックライフノート

技術的な話とか、覚え書き

[Java]Mapインターフェースでよく使うHashMap、LinkedHashMap、TreeMapの違い

今回はJavaのMapインターフェースのお話です。

そもそもMapとは、任意の型同士をキーと値のセットで使用する使い所によっては便利なインターフェースです。

使い方としては、

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

な感じで、大抵の場合Mapインターフェースを実装したHashapクラスでインスタンス化する場合が大抵だと思います。

この場合、Stringクラスのキーと同じくStringクラスの値のセットで使用します。

が、ここでHashMapの特性を理解していないと、意外な所でつまづきます。

例えば、Mapの要素内を全て取り出したい時は拡張for文等で実装すると思いますが。

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

といった感じで出力すると、出力される結果はランダムな要素順になってしまいます。

これはHashMapの特徴で、要素の追加順等は保有しません。

じゃあ要素の追加順で出力したい場合はどうするかと言うと、LinkedHashMapクラスでインスタンス化をします。

そうすると、先程の拡張for文で回してあげると、要素を追加した順に出力をしてくれます。

因みに、TreeMapというクラスもありますが、こちらの場合はキーを昇順に並べ出力してくれます。

まとめると・・・

1.HashMapは取り出す際、要素はランダム
2.LinkedHashMapは、追加(put)した順番
3.TreeMapは、キーを昇順に並べた順番

に出力されます。