次にマップ(あるいは連想配列)について説明します。
Java のマップにも色々種類があるのですが、今回は最も単純な HashMap を使います。
さてリストは配列と同様に先頭から要素が順番に並んでいる構造ですので要素番号を指定することで要素を取得できました。
一方マップは「キー」と「値」をペアにしてひとつの要素を作ります。
それぞれの要素はメモリ内で先頭から並んで配置されるわけでなくバラバラに配置されます(実際にはハッシュテーブルを使って高速にアクセスできます)。
したがって要素番号ではなく、キーを使って要素の値を取得します。
ではまずマップの定義方法について説明します。
import java.util.HashMap; public class Main{ public static void main(String[] args) { // マップ定義 HashMap<String, Integer> map1 = new HashMap<String, Integer>(); HashMap<String, Double> map2 = new HashMap<String, Double>(); } }
ソース 1 の 1 行目の import 分でリストマップ(HashMap)を使うことを宣言しています。
6 行目では map1 という名前の String 型をキー、 Integer 型を値とするマップを定義しています。
7 行目では map2 という名前の String 型をキー、 Double 型を値とするマップを定義しています。
この様にマップもリストと同様にプリミティブ型でなくてラッパークラスを型として指定する必要があります。
さてマップに要素を追加する場合は
マップの名前.put( キー、値 )
と書きます。
また全ての要素を表示する場合はやはり println を使います。
では例を見てみましょう。
import java.util.HashMap; public class Main{ public static void main(String[] args) { // マップ定義 HashMap<String, Integer> map1 = new HashMap<String, Integer>(); HashMap<String, Double> map2 = new HashMap<String, Double>(); // 要素を追加 map1.put( "hoge", 123 ); map1.put( "fuga", 456 ); map1.put( "piyo", 789 ); map2.put( "函館", 1.23 ); map2.put( "釧路", 4.56 ); map2.put( "旭川", 7.89 ); // マップの中身を全て表示 System.out.println( map1 ); System.out.println( map2 ); } }
{hoge=123, fuga=456, piyo=789} {函館=1.23, 釧路=4.56, 旭川=7.89}
マップから指定したキーの値を取り出す場合は
リストの名前.get( キー )
と書きます。
では例を見てみましょう。
import java.util.HashMap; public class Main{ public static void main(String[] args) { // マップ定義 HashMap<String, Integer> map1 = new HashMap<String, Integer>(); HashMap<String, Double> map2 = new HashMap<String, Double>(); // 要素を追加 map1.put( "hoge", 123 ); map1.put( "fuga", 456 ); map1.put( "piyo", 789 ); map2.put( "函館", 1.23 ); map2.put( "釧路", 4.56 ); map2.put( "旭川", 7.89 ); // マップから指定したキーの値を取り出す int a = map1.get( "fuga" ); double b = map2.get( "釧路" ); System.out.println( a ); System.out.println( b ); } }
456 4.56
マップから指定したキーの要素を削除する場合は
マップの名前.remove( キー )
と書きます。
では例を見てみましょう。
import java.util.HashMap; public class Main{ public static void main(String[] args) { // マップ定義 HashMap<String, Integer> map = new HashMap<String, Integer>(); // 要素を追加 map.put( "hoge", 123 ); map.put( "fuga", 456 ); map.put( "piyo", 789 ); // マップの中身を全て表示 System.out.println( map ); // 指定したキーの要素の削除 map.remove( "fuga" ); // マップの中身を全て表示 System.out.println( map ); } }
{hoge=123, fuga=456, piyo=789} {hoge=123, piyo=789}
マップをクリアしたい場合は
マップの名前.clear()
と書きます。
では例を見てみましょう。
import java.util.HashMap; public class Main{ public static void main(String[] args) { // マップ定義 HashMap<String, Integer> map = new HashMap<String, Integer>(); // 要素を追加 map.put( "hoge", 123 ); map.put( "fuga", 456 ); map.put( "piyo", 789 ); // マップの中身を全て表示 System.out.println( map ); // マップのクリア map.clear(); // マップの中身を全て表示 System.out.println( map ); } }
{hoge=123, fuga=456, piyo=789} {}
基本的なマップの使い方は以上ですが、他にも便利な機能がいくつかマップには備わっています。
その他の機能の使い方についてはまとめて例の中で説明したいと思います。
import java.util.HashMap; public class Main{ public static void main(String[] args) { // マップ定義 HashMap<String, Integer> map = new HashMap<String, Integer>(); // 要素を追加 map.put( "hoge", 123 ); map.put( "fuga", 456 ); map.put( "piyo", 789 ); // 指定したキーの要素が含まれているかどうかの判定 // マップの名前.containsKey( キー ) if( map.containsKey( "piyo" ) ) System.out.println( "piyo は含まれています" ); else System.out.println( "piyo は含まれていません" ); map.remove( "piyo" ); if( map.containsKey( "piyo" ) ) System.out.println( "piyo は含まれています" ); else System.out.println( "piyo は含まれていません" ); // 指定したキーの要素の値の置き換え // マップの名前.replace( キー、新しい値 ) System.out.println( map.get( "fuga" ) ); map.replace( "fuga", -123 ); System.out.println( map.get( "fuga" ) ); // マップが空かどうかの判定 // マップの名前.isEmpty() if( map.isEmpty() ) System.out.println( "空です" ); else System.out.println( "空ではありません" ); map.clear(); if( map.isEmpty() ) System.out.println( "空です" ); else System.out.println( "空ではありません" ); } }
piyo は含まれています piyo は含まれていません 456 -123 空ではありません 空です