この記事の目次
1. Mapインタフェースのまとめ
Mapとは2つの情報をキー(重複を許さない)と値のペアとして格納するデータ構造です。格納した値はキーを指定して読み書きできます。
Listインタフェース同様、Mapインタフェースも、キーと値のペアの集まりという抽象概念を提供するのみで、それを内部的にどう実装するかは指定しません。どう実装するかはMapインタフェースを実装するクラスに委ねられます。
Mapインタフェースを実装する具象クラスは次の3つあります。
Mapインタフェースが提供する操作は単純です。基本的はget, put, removeだけですが、実用上はもう少しメソッドを知る必要があります。以下はMapインターフェースの代表的なメソッドを一覧します。
メソッド | 意味 | 戻り値 |
---|---|---|
put(キー,値) | マップにキーと値のペアを格納する | 値 |
get(キー) | キーに対応する値を取得する(なければnull) | 値 |
size() | 格納されているペア数を数える | int |
isEmpty() | 要素数がゼロであるか判定する | boolean |
containsKey(キー) | 指定データがキーに含まれているかを判定する | boolean |
containsValue(値) | 指定データが値に含まれているか判定する | boolean |
clear() | 要素を全て削除する | void |
remove(キー) | 指定した内容の要素を削除する | boolean |
keySet | 格納されているキーの一覧をする | Set(キー) |
2. HashMapの宣言と初期化
HashMap<キーの型名, 値の型名> 変数名 = new HashMap<>();
例
HashMap< String,String > hashMap1 = new HashMap<>(); HashMap< Integer,String > hashMap2 = new HashMap<>(); HashMap< Integer,Float > hashMap3 = new HashMap<>(); HashMap< String,Date > hashMap4 = new HashMap<>();
3. 要素の格納・追加・取得・取消
● 要素を格納・追加する
HashMap変数名.put(キー名, 値); HashMap変数名.putAll(HashMap変数2);
例
package helloworld; import java.util.HashMap; public class HelloWorld { public static void main(String[] args) { //String型のキーとString型の値のペアからなるhashMapを宣言する HashMap< String, String > hashMap = new HashMap<>(); //hashMapに要素を追加する hashMap.put("Apple", "アップル"); hashMap.put("Banana", "バナナ"); hashMap.put("Orange", "オレンジ"); //hashMapをコンソールに出力する System.out.println("元のhashMap:" + hashMap); //重複したキーで値を入れ替える hashMap.put("Apple", "アップル2"); //hashMapをコンソールに出力する System.out.println("hashMapのAppleキーに対応する値を入れ替えた:" + hashMap); //String型のキーとString型の値のペアからなるhashMap2を宣言する HashMap< String, String > hashMap2 = new HashMap<>(); //putAll()メソッドでhashMap2にhashMapの全ての要素を追加する hashMap2.putAll(hashMap); //putAll()で要素を追加したhashMap2の要素を出力する System.out.println("putAll()で要素を追加したhashMap2:" + hashMap2); } }
実行結果:
元のhashMap:{Apple=アップル, Orange=オレンジ, Banana=バナナ} hashMapのAppleキーに対応する値を入れ替えた:{Apple=アップル2, Orange=オレンジ, Banana=バナナ} putAll()で要素を追加したhashMap2:{Apple=アップル2, Orange=オレンジ, Banana=バナナ}
● 要素を取り出す
HashMap変数名.get(キー);
例
package helloworld; import java.util.HashMap; public class HelloWorld { public static void main(String[] args) { //String型のキーとString型の値のペアからなるhashMapを宣言する HashMap< String, String > hashMap = new HashMap<>(); //hashMapに要素を追加する hashMap.put("Apple", "アップル"); hashMap.put("Banana", "バナナ"); hashMap.put("Orange", "オレンジ"); //hashMap内の「Apple」キーに応じる値をコンソールに出力する System.out.println("「Apple」の値:" + hashMap.get("Apple")); } }
実行結果:
「Apple」の値:アップル
● 要素を削除する
* 指定キーの要素を削除する
HashMap変数名.remove(キー); HashMap変数名.remove(キー,値);
* clear()で全ての要素を削除する
HashMap変数名.clear();
例
package helloworld; import java.util.HashMap; public class HelloWorld { public static void main(String[] args) { //String型のキーとString型の値のペアからなるhashMapを宣言する HashMap< String, String > hashMap = new HashMap<>(); //hashMapに要素を追加する hashMap.put("Apple", "アップル"); hashMap.put("Banana", "バナナ"); hashMap.put("Orange", "オレンジ"); hashMap.put("Tomato", "トマト"); //hashMap内の「Apple」キーに応じる値をコンソールに出力する System.out.println("元のhashMap: " + hashMap); //hashMapの「Apple」キーの要素を削除する hashMap.remove("Apple"); System.out.println("remove(\"Apple\")を実行したhashMap: " + hashMap); //hashMap内の「Banana」キーと"バナナ"値の要素を削除する hashMap.remove("Banana","バナナ"); System.out.println("remove(\"Banana\",\"バナナ\")を実行したhashMap: " + hashMap); //hashMap内の「Orange」キーと"バナナ"値の要素を削除したいが、マッピングされないため削除しません。 hashMap.remove("Orange","バナナ"); System.out.println("remove(\"Orange\",\"バナナ\")を実行したhashMap: " + hashMap); //clear()メソッドで全ての要素を削除する hashMap.clear(); System.out.println("clear()を実行したhashMap: " + hashMap); } }
実行結果:
元のhashMap: {Apple=アップル, Tomato=トマト, Orange=オレンジ, Banana=バナナ} remove("Apple")を実行したhashMap: {Tomato=トマト, Orange=オレンジ, Banana=バナナ} remove("Banana","バナナ")を実行したhashMap: {Tomato=トマト, Orange=オレンジ} remove("Orange","バナナ")を実行したhashMap: {Tomato=トマト, Orange=オレンジ} clear()を実行したhashMap: {}
4. 要素を順に取り出す方法
● 拡張for文を用いたHashMap要素の取り出し
* HashMapのキーをkeySet()メソッドで取得する
for(HashMapのキーの型 key: HashMap変数名.keySet()){ //key でget()メソッドを使って要素を扱う }
例
package helloworld; import java.util.HashMap; public class HelloWorld { public static void main(String[] args) { //String型のキーとString型の値のペアからなるhashMapを宣言する HashMap< String, String > hashMap = new HashMap<>(); //hashMapに要素を追加する hashMap.put("Apple", "アップル"); hashMap.put("Banana", "バナナ"); hashMap.put("Orange", "オレンジ"); hashMap.put("Tomato", "トマト"); //拡張for文でhashMapの全てのキーを取り出す for(String key : hashMap.keySet()){ System.out.println(" " + key); } } }
実行結果:
Apple Tomato Orange Banana
* HashMapの値をvalues()メソッドで取得する
for(HashMapの値の型 value: HashMap変数名.values()){ //valueを使って要素を扱う }
例
package helloworld; import java.util.HashMap; public class HelloWorld { public static void main(String[] args) { //String型のキーとString型の値のペアからなるhashMapを宣言する HashMap< String, String > hashMap = new HashMap<>(); //hashMapに要素を追加する hashMap.put("Apple", "アップル"); hashMap.put("Banana", "バナナ"); hashMap.put("Orange", "オレンジ"); hashMap.put("Tomato", "トマト"); //拡張for文でhashMapの全ての値を取り出す for(String value : hashMap.values()){ System.out.println(" " + value); } } }
実行結果:
アップル トマト オレンジ バナナ
* キーと値のペアを全て取得する
for(Map.Entry<キー型, 値型> entry : HashMap変数名.entrySet()){ //キーを返すentry.getKey()と値を返すentry.getValue()を用いて操作する }
例
package helloworld; import java.util.HashMap; import java.util.Map; public class HelloWorld { public static void main(String[] args) { //String型のキーとString型の値のペアからなるhashMapを宣言する HashMap< String, String > hashMap = new HashMap<>(); //hashMapに要素を追加する hashMap.put("Apple", "アップル"); hashMap.put("Banana", "バナナ"); hashMap.put("Orange", "オレンジ"); hashMap.put("Tomato", "トマト"); //拡張for文でhashMapの全てのキーと値を取り出す for(Map.Entry< String, String > entry: hashMap.entrySet()){ System.out.println(entry.getKey() + " : " + entry.getValue()); } } }
実行結果:
Apple : アップル Tomato : トマト Orange : オレンジ Banana : バナナ
● イテレータを用いたHashMap要素の取り出し
for (Iterator> iterator = HashMap変数名.entrySet().iterator(); iterator.hasNext();) { Map.Entry< キー型, 値型 > entry = iterator.next(); //キーを返すentry.getKey()と値を返すentry.getValue()を用いて操作する }
例
package helloworld; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class HelloWorld { public static void main(String[] args) { //String型のキーとString型の値のペアからなるhashMapを宣言する HashMap< String, String > hashMap = new HashMap<>(); //hashMapに要素を追加する hashMap.put("Apple", "アップル"); hashMap.put("Banana", "バナナ"); hashMap.put("Orange", "オレンジ"); hashMap.put("Tomato", "トマト"); //IteratorでhashMapの全てのキーと値を取り出す for(Iterator< Map.Entry< String, String > > iterator = hashMap.entrySet().iterator(); iterator.hasNext();){ Map.Entry< String, String > entry = iterator.next(); System.out.println(entry.getKey() + " : " + entry.getValue()); } } }
実行結果:
Apple : アップル Tomato : トマト Orange : オレンジ Banana : バナナ
5. 主に使われているメソッド
● size()で要素数を取得する
HashMap変数名.size()
● containsKey()とcontainsValue()で指定データがキーか値に含まれているかを判定する
HashMap変数名.containsKey(キー); HashMap変数名.containsValue(値);
例
package helloworld; import java.util.HashMap; public class HelloWorld { public static void main(String[] args) { //String型のキーとString型の値のペアからなるhashMapを宣言する HashMap< String, String > hashMap = new HashMap<>(); //hashMapに要素を追加する hashMap.put("Apple", "アップル"); hashMap.put("Banana", "バナナ"); hashMap.put("Orange", "オレンジ"); hashMap.put("Tomato", "トマト"); //hashMapの全ての要素をコンソールに出力する System.out.println("全要素:" + hashMap); //containsKey()で指定データがキーに含まれているかを判定する if(hashMap.containsKey("Apple")){ System.out.println("「Apple」のキーの要素が見つかりました"); } //containsValue()で指定データが値に含まれているかを判定する if(hashMap.containsValue("バナナ")){ System.out.println("「バナナ」の値の要素が見つかりました"); } } }
実行結果:
全要素:{Apple=アップル, Tomato=トマト, Orange=オレンジ, Banana=バナナ} 「Apple」のキーの要素が見つかりました 「バナナ」の値の要素が見つかりました
● replace()で要素を置き換える置き返す
replace(キー,値); replace(キー,値1,値2);
例
package helloworld; import java.util.HashMap; public class HelloWorld { public static void main(String[] args) { //String型のキーとString型の値のペアからなるhashMapを宣言する HashMap< String, String > hashMap = new HashMap<>(); //hashMapに要素を追加する hashMap.put("Apple", "アップル"); hashMap.put("Banana", "バナナ"); hashMap.put("Orange", "オレンジ"); //hashMapの全ての要素をコンソールに出力する System.out.println("元のhashMapの全要素:" + hashMap); //"Apple"キーのペアを["Apple", "アップル2"]に置き返す hashMap.replace("Apple", "アップル2"); System.out.println("新しいhashMapの全要素:" + hashMap); //["Banana", "バナナ"]のペアから["Banana","バナナ2"]に置き返す hashMap.replace("Banana", "バナナ","バナナ2"); System.out.println("新しいhashMapの全要素:" + hashMap); } }
実行結果:
元のhashMapの全要素:{Apple=アップル, Orange=オレンジ, Banana=バナナ} 新しいhashMapの全要素:{Apple=アップル2, Orange=オレンジ, Banana=バナナ} 新しいhashMapの全要素:{Apple=アップル2, Orange=オレンジ, Banana=バナナ2}
6. HashMapの値をListに変換する
List<値の型> List変数名 = new ArrayList<値の型>(Map型の変数名.values());
例
package helloworld; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class HelloWorld { public static void main(String[] args) { //String型のキーとString型の値のペアからなるhashMapを宣言する HashMap< String, String > hashMap = new HashMap<>(); //hashMapに要素を追加する hashMap.put("Apple", "アップル"); hashMap.put("Banana", "バナナ"); hashMap.put("Orange", "オレンジ"); //hashMapの全ての要素をコンソールに出力する System.out.println("元のhashMapの全要素:" + hashMap); // Listを宣言し、valuesメソッドを使用してMapの値を取得して、Listに格納する List< String > list = new ArrayList<>(hashMap.values()); System.out.println("listの全要素:" + list); } }
実行結果:
元のhashMapの全要素:{Apple=アップル, Orange=オレンジ, Banana=バナナ} listの全要素:[アップル, オレンジ, バナナ]
7. まとめ
今回はMapの代表としてHashMapについてまとめていきました。HashMapは配列より少し難しいと見えますが、開発現場に多く利用されていますので、ぜひ習得しておいてください。
広告