コレクション・フレームワーク (4/5)
作成:2012-05-06 10:29
更新:2012-05-06 10:29
更新:2012-05-06 10:29
■HashMapによるマップの利用
配列は数字で値を管理しますが、数字の代わりに「名前」で値を管理する連想配列と呼ばれる機能を提供するのが、「マップ」というものです。これは「Map」というインターフェイスを実装したクラスとして、けっこうな数のものが用意されています。その中で、もっとも一般的に使われるのは「HashMap」というクラスでしょう。
マップでは、「キー」と呼ばれる名前と値が組になっています。この組のことを「エントリー(Entry)」といいます。このエントリーの形で値はマップ内で管理されている、と考えるとよいでしょう。取り出すときには、キーを指定して取り出します。では、このHashMapも基本的な使い方を整理しておきましょう。まずはコンストラクタからです。
・値の追加
・値の取得/削除
・保管されている全値を得る
・保管されている全キーを得る
・Map.EntryのSetを得る
・要素数を得る
――では、このHashMapも簡単な利用例を挙げておきましょう。下のリスト欄は、HashMapを作成した後、いくつかの値を保管して、その全要素を取り出し表示するサンプルです。ここでは、putでいくつかの値を保管した後、以下のようにして繰り返し処理を行なっています。
マップでは、「キー」と呼ばれる名前と値が組になっています。この組のことを「エントリー(Entry)」といいます。このエントリーの形で値はマップ内で管理されている、と考えるとよいでしょう。取り出すときには、キーを指定して取り出します。では、このHashMapも基本的な使い方を整理しておきましょう。まずはコンストラクタからです。
HashMap 変数 = new HashMap();この他にもいくつかコンストラクタはありますが、これだけ覚えておけばいいでしょう。続いて、その他のメソッドについてです。
・値の追加
《HashMap》.put( キー , 値 );値の追加は、addではなく「put」というメソッドとして用意されています。引数には、キーとなる値と、それに設定する値の2つを用意します。これで、指定されたキーに値が保管されます。
・値の取得/削除
Object 変数 = 《HashMap》.get( キー );値の取得は、「get」で行います。引数にキーを指定すると、そのキーに保管されている値が返されます。これはObjectインスタンスにキャストされているので、必要に応じて元のクラスに戻して使います。また、HashMapから保管されている値を削除するには「remove」を使います。これも引数にキーを指定すると、そのキーと、そのキーに保管されている値がとりのぞかれます。
《HashMap》.reove( 値 );
・保管されている全値を得る
Collection] 変数 = 《HashMap》.values();HashMapに保管されている値だけをまとめて取り出したい時に利用します。返り値は、「Collection」というクラスのインスタンスになります。これは、ArrayListやHashSet、HashMapなどのコレクションクラスのスーパークラスとなるものです。ここからforなどを使って順に値を取り出し処理できるようになっています。
・保管されている全キーを得る
Set 変数 = 《HashMap》.keySet();こちらは、保管されているキーをまとめて取り出すものです。返り値は「Set」インスタンスになります。Setというのは、HashSetの元になるもので、たくさんの値をまとめる集合です。これですべてのキーをまとめて取り出し、forなどを使って順に処理することができます。
・Map.EntryのSetを得る
Set 変数 = 《HashMap》.entrySet();HashMapに保管されている全要素を処理したりするのに利用します。これは保管されている全要素を、「Map.Entry」というクラスのインスタンスをSetでまとめたものとして取り出します。Map.Entryというのは、先ほど触れたように、キーと値を組にして保管するクラスでしたね。これでSetを取り出し、forでそこから順にMap.Entryを取り出して処理することができます。
・要素数を得る
int 変数 = 《HahsMap》.size();保管されている値の数を得るものです。これは既に登場したのでわかりますね。
――では、このHashMapも簡単な利用例を挙げておきましょう。下のリスト欄は、HashMapを作成した後、いくつかの値を保管して、その全要素を取り出し表示するサンプルです。ここでは、putでいくつかの値を保管した後、以下のようにして繰り返し処理を行なっています。
for(Object obj : map.entrySet()){……略……}entrySetで、Map.EntryをまとめたSetを取り出し、forでそこから順番にオブジェクトを取り出しています。取り出したオブジェクトは、Map.Entryインスタンスに戻してから、そのキーと値を取り出しています。
Map.Entry entry = (Map.Entry)obj;Map.Entryクラスは、キーと値をセットにしたものです。保管されているキーと値は、それぞれ「getKey」「getValue」でとり出すことができます。後は、それをもとに値を表示するだけですね。
System.out.println(entry.getKey() + ": " + entry.getValue());
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
import java.util.*; public class TestApp { public static void main(String[] args) { HashMap map = new HashMap(); map.put("国語", 98); map.put("算数", 79); map.put("理科", 65); map.put("社会", 82); for(Object obj : map.entrySet()){ Map.Entry entry = (Map.Entry)obj; System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
※関連コンテンツ