Java Map/HashMapよくある使い方

2009/02/12 17:18更新
TAGS: Java | コレクション | Map | HashMap | マップ

Mapは、「キー」と「値」のペアになる要素を持ったデータ構造です。

Map関連主なインタフェースやクラス


java.util.Map [I]
∟java.util.HashMap
 ∟java.util.LinkedHashMap
∟java.util.Hashtable
 ∟java.util.Properties
∟java.util.SortedMap [I]
 ∟java.util.TreeMap

本文はjava.util.Map/java.util.HashMapの基本的な使い方を紹介します。

次のサンプルは、HashMapから生成されたMapインスタンスに要素の追加、Mapから要素の取得・削除などについて簡単に説明しています。

Map/HashMapサンプル


Javaコード:
package com.test.map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * Java Map/HashMapの使い方についてシンプルなサンプル
 *
 * 1)Mapインスタンスの生成
 * 2)Mapに要素の追加
 * 3)Mapから要素の取得
 * 4)Mapから要素の削除
 */
public class TestHashMap {
    public static void main(String []args) {
        ////////////////////////////////////
        //1)HashMapからMapのインスタンスを生成
        Map map = new HashMap();    //その他コンストラクタもあります。詳細はAPI DOCを参照
        
        ////////////////////////////////////
        //2)Mapに要素の追加
        map.put("name", "Java太郎");   //key/value。String型
        map.put("name", "Java太郎01");   //重複putの場合、どうなる?
        map.put("age", new Integer(10));     //Integer型
        //map.putAll(Map);  //ほかのMapオブジェクトに含まれたものを一括追加
        //...   その他型の値の追加もできますよ
        
        
        ////////////////////////////////////
        //3)Mapから要素の取得
        
        //取得方法1:指定するキーによる取得
        String strValue = (String)map.get("name");  //nameはStringの型であるため
        Integer intValue = (Integer)map.get("age");    //ageはIntegerの型であるため
        
        System.out.println("name:" + strValue);
        System.out.println("age:" + intValue);
        
        //取得方法2:キーセットから取得
        System.out.println("************** Map.keySet() **************");
        Set keySet = map.keySet();  //すべてのキー値を取得
        Iterator keyIte = keySet.iterator();
        while(keyIte.hasNext()) {    //ループ。反復子iteratorによる キー 取得
            Object key = keyIte.next();
            Object value = map.get(key);        //キーよりvalueを取得
            
            System.out.println(key + "=" + value);
        }
        
        System.out.println("************** Map.entrySet() **************");
        //取得方法3:entrySet(key=valueの形)から取得
        Set entrySet = map.entrySet();     //すべてのvalue
        Iterator entryIte = entrySet.iterator();
        while(entryIte.hasNext()) {              //ループ
            Map.Entry obj = (Map.Entry)entryIte.next();        //key=value
            
            System.out.println(obj.getKey() + "="  + obj.getValue());            
        }
        
        System.out.println("************** Map.values() **************");
        Collection values = map.values();
        //取得方法3:Mapからコレクションに変更
        for (Object obj:values) {   //JDK1.5+
            System.out.println(obj);
        }
        
        System.out.println("************** 削除 **************");
        //4)Mapから要素の削除
        map.remove("name"); //キーは"name"の要素を削除
        System.out.println("size="+map.size());
        map.clear();    //すべての要素を削除
        System.out.println("size="+map.size());
        
        System.out.println("************** その他 **************");
        //5)その他
        map.put(null, null);    //HashMapの場合,nullもセット可能。
        System.out.println("size="+map.size());
        
        Map<String, Integer>mapNew = new HashMap<String, Integer>();    //Generics機能。JDK1.5から。
            //パラメータ1:String型 にしかセットできません
            //パラメータ2:Integer型 にしかセットできません
        mapNew.put("age", new Integer(0));
        //mapNew.put("name", "10");     //"10"はInteger型ではないので、これはできませんよ
        
    }
}


実行結果:
name:Java太郎01
age:10
************** Map.keySet() **************
age=10
name=Java太郎01
************** Map.entrySet() **************
age=10
name=Java太郎01
************** Map.values() **************
10
Java太郎01
************** 削除 **************
size=1
size=0
************** その他 **************
size=1


参考資料


Map API doc(Java 2 Platform SE 5.0)
HashMap  API doc(Java 2 Platform SE 5.0)

著者について
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


コメント