この記事の目次
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は配列より少し難しいと見えますが、開発現場に多く利用されていますので、ぜひ習得しておいてください。
広告