🎃

【Java】Mapの種類を変更する

2024/06/10に公開

Mapとは

JavaのMapには、HashMap、TreeMap、LinkedHashMapの3種類があります。

HashMap

他のMapよりも高速に機能するため、最も一般的なMapクラスです。
キーからハッシュ値を算出して値を管理しているため、キーの順番は保証されておらず同じ順序で取り出せるとは限りません。

TreeMap

ツリー構造を持つMapクラスです。
キーは昇順に並び替えられて保持されています。

LinkedHashMap

HashMapとLinkedListの両方で管理しているMapクラスです。
キーは挿入順に保持されます。

方法

コンストラクタにMapを渡す方法

Map<Integer, String> hashMap = new HashMap<Integer, String>();
TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>(hashMap);

Map.putAll()を使用する方法

Map<Integer, String> hashMap = new HashMap<Integer, String>();
TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>();
treeMap.putAll(hashMap);

結論

openJDKのソースコードを確認したところ、「コンストラクタにMapを渡す方法」でも結果的に内部でMap.putAll()が使われていることが分かりました。
そのため、コーディング規約などで指定されていない場合はどちらを使っても問題ないと思います。

ただ、個人的には「コンストラクタにMapを渡す方法」推しです。
見た目が簡潔になりますし、空のインスタンスを作成する必要もなくなるので、今後もし記述する機会があれば私は前者の方法をとりたいと思います。

Discussion