目次
JavaのDictionaryとは

この記事では、JavaのDictionaryクラスについて解説します。
Dictionaryクラスとは、Hashtableの抽象基本クラスのことです。
キーを指定することで、関連する要素を参照できます。
ただし、Dictionaryクラスは現在使われておらず、代わりに「HashMap」を使います。
Mapとは

ではまず、Mapとは何かについて見ていきましょう。
JavaのMapインターフェースでは、連想配列が扱えます。
Mapインターフェースは、キーを値にマッピングするオブジェクトです。
もう少し噛み砕いて説明すると、値1つひとつに「キー(名前)」を設定し、値を設定したり取り出したりできます。
Mapインターフェースを実装しているクラスに、以下のようなものが挙げられます。
- HashMapクラス:キーからハッシュ値を算出して管理し、順序は保証されません
- TreeMapクラス:キーによってソートし、順序が保証されます
- LinkedHashMapクラス:挿入された順番で保持します、設定によってアクセス順で要素を保持することも可能です
ここでは、よく使われる HashMapクラス で説明していきます。
HashMapの使い方

では、HashMapの使い方を見ていきましょう。
使い方の流れは次の通りです。
- HashMapを宣言
- 値を「put」で追加
- 値を「get」で取得
順番に説明します!
①HashMapを宣言
HashMapを使うには、インスタンスを生成して初期化します。
HashMapクラスを宣言するには、次のように記述しましょう。
Map<キーの型名, 値の型名> オブジェクト名 = new HashMap<>();
また、HashMapを使うために、Javaファイルの冒頭で import を行います。
import java.util.Map; import java.util.HashMap;
宣言はこれだけでOKです!
②値を「put」で追加
HashMapに値を追加するには「putメソッド」を使います。
第1引数にキー(名前)を、第2引数にキーに関連づける値を記述しましょう。
例えば、次のように記述できます。
■記述例
Map<String, String> color = new HashMap<>();
color.put("red", "赤");
color.put("blue", "青");
color.put("yellow", "黄");
もしくは、ブロックを使用して、以下のように記述も可能です。
■記述例
Map<String, String> color = new HashMap<String, String>() {
{
put("red", "赤");
put("blue", "青");
put("yellow", "黄");
}
};
上記の記述で値を追加する場合は、ダイヤモンド演算子(<>)が使えません。
そのため、型の引数(<String, String>)は省略できないので注意しましょう。
③値を「get」で取得
では、HashMapで追加した値を取得してみましょう。
値を取得する際には「getメソッド」を使います。
putと合わせて、getで値を取得するプログラムの記述例は、次の通りです。
■記述例
import java.util.Map;
import java.util.HashMap;
public class Main{
public static void main(String[] args){
Map<String, String> color = new HashMap<>();
color.put("red", "赤");
color.put("blue", "青");
color.put("yellow", "黄");
System.out.println(color.get("red"));
System.out.println(color.get("blue"));
System.out.println(color.get("yellow"));
}
}
■実行結果
mbp:Desktop potepan$ java Main
赤
青
黄
それぞれ、指定したキーに関連づいた値が取得できていますね!
なお、キー・値を設定していないものを取得しようとすると「NULL」が返ります。
■記述例
System.out.println(color.get("red"));
System.out.println(color.get("blue"));
System.out.println(color.get("yellow"));
System.out.println(color.get("green")); // 追加していない値
■実行結果
mbp:Desktop potepan$ java Main
赤
青
黄
null
また、キーがマッピングされている状態で値を上書きすると、関連づけも上書きされます。
■記述例
import java.util.Map;
import java.util.HashMap;
public class Main{
public static void main(String[] args){
Map<String, String> color = new HashMap<>();
color.put("red", "赤");
color.put("blue", "青");
color.put("yellow", "黄");
color.put("red", "レッド");
System.out.println(color.get("red"));
System.out.println(color.get("blue"));
System.out.println(color.get("yellow"));
}
}
■実行結果
mbp:Desktop potepan$ java Main
レッド
青
黄
HashMapで使えるメソッド

HashMapでは、先述した putメソッド getメソッド 以外にも、さまざまなメソッだが使えます。
一覧にすると、次の通りです。
| メソッド | 詳細 |
|---|---|
| Map.put(key, value) | マップに値を追加 |
| Map.get(key) | マップの値を取得 |
| Map.remove(key) | マップの値を削除 |
| Map.clear() | マップの値を全削除 |
| Map.containsKey(key) | 指定したキーが存在する場合はtrue、存在しない場合はfalseを返す |
| Map.size() | マップの長さを取得 |
| Map.entrySet() | キーと値をセットで取得 |
| Map.keySet() | キーだけを取得 |
| Map.values() | 値だけを取得 |
ここでは、いくつかのメソッドを実際に使い、動作を確認してみます!
■記述例
import java.util.Map;
import java.util.HashMap;
public class Main{
public static void main(String[] args){
Map<String, String> color = new HashMap<>();
color.put("red", "赤");
color.put("blue", "青");
color.put("yellow", "黄");
color.put("green", "緑");
color.put("pink", "ピンク");
System.out.println("すべての値を表示します");
System.out.println(color.get("red"));
System.out.println(color.get("blue"));
System.out.println(color.get("yellow"));
System.out.println(color.get("green"));
System.out.println(color.get("pink"));
System.out.println();
System.out.println("マップの長さを表示します");
System.out.println(color.size());
System.out.println();
// pinkを削除
color.remove("pink");
System.out.println("pinkを削除後に、すべての値を表示します");
System.out.println(color.get("red"));
System.out.println(color.get("blue"));
System.out.println(color.get("yellow"));
System.out.println(color.get("green"));
System.out.println(color.get("pink"));
System.out.println();
System.out.println("red が存在するかチェックします");
System.out.println(color.containsKey("red"));
System.out.println();
System.out.println("すべてのキー・値を取得します");
// entrySetメソッドで、すべてのキー・値を取得します
for (Map.Entry<String, String> entrySet : color.entrySet()) {
System.out.println(entrySet.getKey() + " = " + entrySet.getValue());
}
System.out.println();
// 全削除
color.clear();
System.out.println("すべてのキー・値を削除します");
System.out.println(color.get("red"));
System.out.println(color.get("blue"));
System.out.println(color.get("yellow"));
System.out.println(color.get("green"));
System.out.println(color.get("pink"));
}
}
■実行結果 mbp:Desktop potepan$ java Main すべての値を表示します 赤 青 黄 緑 ピンク マップの長さを表示します 5 pinkを削除後に、すべての値を表示します 赤 青 黄 緑 null red が存在するかチェックします true すべてのキー・値を取得します red = 赤 green = 緑 blue = 青 yellow = 黄 すべてのキー・値を削除します null null null null null
それぞれ、意図した動作になっているのがわかるはずです。
特に、entrySetメソッドは、すべてのキー・値を一括で取得できるので便利です。
ぜひここで、使い方を覚えていってください!
まとめ

JavaのDictionaryは、Hashtableの抽象基本クラスですが、現在は使用されていません。
実装する際は、Dictionaryクラスではなく「Mapインタフェース」を実装しましょう。
使い方は、この記事でイチから解説させていただきました!
ぜひ参考に、使いこなせるようになってください。