|
|
コレクション(HashMap) |
H.Kamifuji . |
次はHashMapです。連想配列とも呼ばれます。今までは要素はインデックス番号とペアになっていましたが、HashMapの場合はキーとなる文字列と要素がペアになっています。例えば「りんご」というキーに対応する要素が「Apple」のような感じです。このように要素を登録する時に、それに対するキーを文字列などで合わせて指定し、要素を検索したり取り出す時はキーを使って要素を指定します。 当ページでは、Linux CentOS7 の Gnome で動作テストしています。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2021/11)では、JDK-17.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 にアップされています。一部、上位互換について、見直しを行っていきます。 |
|
ここではHashMapクラスを見ていきます。HashMapは連想配列とも呼ばれ、要素を格納する時に要素に対応するキーを合わせて登録します。例えば商品に関する値段を登録していく場合、商品の値段を要素として登録すると同時に商品名をキーとして登録することで、商品名を使って商品の値段を取り出すことが出来るようになります。 ashMapを使うには、まずHashMapクラスのオブジェクトを作成します。HashMapクラスのコンストラクタの1つは下記のようになっています。 HashMap public HashMap()デフォルトの初期容量 (16) とデフォルトの負荷係数 (0.75) で空の HashMap を作成します。 初期容量は最初にどれくらいの要素を格納できる領域を確保するかです。足りなくなれば自動的に拡張されます。また負荷係数とは容量をいつのタイミングで拡張するかを表すものです。負荷係数が0.75の場合は全容量の75%まで要素で埋まったら領域を拡大するということになります。 次にnew演算子を使ってHashMapのオブジェクトを作成します。 HashMap<型1,型2> 変数名 = new HashMap<型1,型2>();HashMapの場合は型を2つ指定します。1つ目はキーの型、2つ目は格納する要素の型となります。例えばキーをInteger型、要素をString型とした場合は下記のような感じとなります。 HashMap<Integer,String> map = new HashMap<Integer,String>(); キー 要素 ------------------- 1000 テレビ 1001 ビデオ 2000 エアコンまた、キーをString型、要素をString型とした場合は下記のような感じとなります。 HashMap<String,String> map = new HashMap<String,String>(); キー 要素 ------------------- テレビ Television ビデオ Video 時計 Watchでは、次項のページで要素の格納と取り出しについて確認します。 |
では実際に要素を格納してから取り出してみます。 要素を格納するにはHashMapクラスで用意されている"put"メソッドを使います。 put public V put(K key, V value)指定された値と指定されたキーをこのマップに関連付けます。マップが以前にこのキーのマッピングを保持していた場合、古い値が置き換えられます。 パラメータ: key - 指定される値が関連付けられるキー value - 指定されるキーに関連付けられる値 戻り値: 指定されたキーに関連した値。または、キーのマッピングがなかった場合はnull。戻り値 null は、HashMap が以前に null と指定されたキーを関連付けていたことを示す場合もある 要素と、それに対応するキーを合わせてマップに登録します。既にキーが登録されていた場合は、そのキーに対応する要素をこのメソッドで指定した要素に置き換えます。 HashMap<String,String> map = new HashMap<String,String>(); map.put("りんご", "apple"); map.put("ぶどう", "grapes");今度は要素を取り出します。要素を取り出すにはキーを指定し、そのキーに対応した要素を取り出すことになります。HashMapクラスで用意されている"get"メソッドを使います。 get public V get(Object key)この識別情報ハッシュマップで指定されたキーにマップされている値を返します。マップがこのキーのマッピングを保持していない場合は null を返します。戻り値の null は、マップがキーのマッピングを保持していないことを示すとはかぎりません。つまり、マップが明示的にキーを null にマップすることもあります。containsKey メソッドを使うと、こうした 2 つの場合を見分けることができます。 パラメータ: key - 関連付けられた値が返されるキー 戻り値: マップが、指定されたキーにマッピングしている値。このキーに対するマッピングがマップにない 場合は null 例えば下記のような感じです。 HashMap<String,String> map = new HashMap<String,String>(); map.put("りんご", "apple"); map.put("ぶどう", "grapes"); System.out.println(map.get("りんご"));また要素を取得する前に、要素を指定するためのキーがマップに登録されているかどうかを先に確認する事も出来ます。HashMapクラスで用意されている"containsKey"メソッドを使います。 containsKey public boolean containsKey(Object key)マップが指定されたキーのマッピングを保持する場合に true を返します。 パラメータ: key - マップにあるかどうかが判定されるキー 戻り値: マップが指定されたキーのマッピングを保持する場合は true 例えば下記のような感じです。 HashMap<String,String> map = new HashMap<String,String>(); map.put("りんご", "apple"); map.put("ぶどう", "grapes"); if (map.containsKey("りんご")){ System.out.println(map.get("りんご")); }else{ System.out.println("指定したキーは存在しません"); }では実際に試してみましょう。 サンプルプログラム下記のサンプルを実行してみよう。import java.util.HashMap; class hashmapTest1{ public static void main(String args[]){ HashMap<String,String> map = new HashMap<String,String>(); map.put("りんご", "apple"); map.put("ぶどう", "grapes"); if (map.containsKey("りんご")){ System.out.print("りんごを英語にすると"); System.out.println(map.get("りんご")); }else{ System.out.println("指定したキーは存在しません"); } } }上記をコンパイルした後で実行すると次のように表示されます。 [xxxxxxxx@dddddddddd HashMap]$ java hashmapTest1 りんごを英語にするとapple [xxxxxxxx@dddddddddd HashMap]$ |
ここでは要素の削除について見てみます。マップから要素を削除するにはHashMapクラスで用意されている"remove"メソッドを使います。 remove public V remove(Object key)キーに対するマッピングがあれば、そのキーをマップから削除します。 パラメータ: key - マッピングがマップから削除されるキー 戻り値: 指定されたキーに関連した値。または、キーのマッピングがなかった場合は null。戻り値 null は、マップが以前に null と指定されたキーを関連付けていたことを示す場合もある キーを指定して対応する要素を削除します。また全ての要素をまとめて削除する場合にはHashMapクラスで用意されている"clear"メソッドを使います clear public void clear()すべてのマッピングをマップから削除します。 メソッドを実行すると全ての要素が削除されます。 では実際に試してみましょう。 サンプルプログラム下記のサンプルを実行してみよう。import java.util.HashMap; class hashmapTest2{ public static void main(String args[]){ HashMap<String,String> map = new HashMap<String,String>(); map.put("りんご", "apple"); map.put("ぶどう", "grapes"); if (map.containsKey("りんご")){ System.out.print("りんごを英語にすると"); System.out.println(map.get("りんご")); }else{ System.out.println("指定したキーは存在しません"); } map.remove("ぶどう"); if (map.containsKey("ぶどう")){ System.out.print("ぶどう英語にすると"); System.out.println(map.get("ぶどう")); }else{ System.out.println("指定したキーは存在しません"); } } }上記をコンパイルした後で実行すると次のように表示されます。 [xxxxxxxx@dddddddddd HashMap]$ java hashmapTest2 りんごを英語にするとapple 指定したキーは存在しません [xxxxxxxx@dddddddddd HashMap]$ |
|