前回、複数のデータを一つにまとめて扱う方法としてArrayListを学んだが、今回はHashMapを紹介する。
配列やArrayListではインデックスに0から始まる整数を記述したが、HashMapではここに任意の型を指定できる。
言語によっては「連想配列」などと呼ばれる場合もある。
宣言は
import java.util.HashMap; HashMap<型1,型2> 変数名 = new HashMap<型1、型2>();
で行う。<型1,型2>の型1に部分にkeyとなる部分の型,型2にvalueとなる部分の型を書く。
ArrayListと同様int型やdouble型のような基本型を書くことができないので注意が必要だ。
また、Java SE7からは右辺の型は省略可能となった、環境が許せばそちらを使うとよいだろう。
HashMap<型1,型2> 変数名 = new HashMap<>(); 例) HashMap<String,String> months = new HashMap<>();
putメソッドで要素を追加していく
//Mapを宣言 HashMap<String,String> months=new HashMap<>(); //Mapに追加 months.put("Jan","1月"); months.put("Feb","2月"); months.put("Mar","3月");
値を取り出すのはget(key)だ。
System.out.println(months.get("Jan")); //->1月
存在しないキーを指定した場合nullを返す。
System.out.println(months.get("Apr")); //->null
そのキーが存在するかはcontainsKeyメソッドで判定できる。
if(months.containsKey("Feb")){ System.out.println("存在します。"); }else{ System.out.println("存在しません。"); } }
要素数の取得は.ArrayList同様size()メソッドを使う。
System.out.println(months.size()); //->3
要素の全件取り出しには拡張for文を使う。
keyの全件とりだし、valueの全件とりだし、両方一度に取り出す例を以下に記す。
この場合、格納順序は無視される点に注意が必要だ。(今回の場合だと最初に2月が表示されたりする可能性がある)
格納順序が必要な場合は他のクラスを使う(LinkedHashMap)
//keyの全件取り出し for(String key:months.keySet()){ System.out.println(key); } //valueの全件取り出し for(String val:months.values()){ System.out.println(val); } //keyとvalueの全件取り出し for(String key:months.keySet()){ String val=months.get(key); System.out.println(key+":"+val); } //全件取り出しはこれもあり for(Map.Entry<String, String> entry:months.entrySet()){ System.out.println(entry.getKey()+":"+entry.getValue()); }
これで基本的な操作はOKだ。何かと何かを一対一で対応させたい場合にとても便利なので覚えてこう。
最後に、よく使われる他のメソッドを一覧しておく。
remove(key) | 指定されたキーを削除 |
---|---|
clear() | すべての要素を削除 |
isEmpty() | 要素が空の場合trueを返す |
コメント