JavaA2Z

KAB-studio > プログラミング > JavaA2Z > HashMapとは

HashMap

日本語 細切り地図
英語 hash map
ふりがな はっしゅまっぷ
フリガナ ハッシュマップ

解説

辞書クラス
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.util.HashMap。
Mapインターフェイス実装クラスだが、広義の「コレクション」に含まれる。
辞書」を実現するクラス。「値」を「キー」で登録し、「キー」を使用して「値」を取得できる。put()メソッドで追加し、get()メソッドで取得する。
キーひとつにつき値はひとつ。同じキーを複数登録することはできない。キーが同じかどうかはequals()メソッドでチェックされる。
 
値を追加する際に、キーのハッシュコードを元に「グループ分け」をうため、値の取得時に「全検索」をする必要がなく、そのため他のコレクションより値の取得が早いというメリットがある。
要素としてObjectサブクラス、つまりあらゆるクラスを受け取れる。しかしそのため、要素として格納されているが不明のため、ClassCastExceptionが発生する可能性大。
特に、Javaでは「引数参照経由で値を返す」のが難しいため、メソッド戻り値としてHashMapを返し、その中に「複数の戻り値」として値を返すという「テクニック」があるが、メソッドの中身を見なければキーもも分からず、バグの温床となりやすいため、この使用方法はすべきではない。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.util.HashMap;

public class Sample
{
    public static void main( String[] args )
    {
        // HashMapを使用します。
        HashMap hashMap = new HashMap();
        // 要素を追加します。
        hashMap.put( "Integer""整数値型だよ" );
        // 要素を取り出します。
        System.out.println( hashMap.get("Integer" ) );
        // 整数値型だよ

        // put()の引数はObjectなので、クラスならなんでも受け取れます。
        hashMap.put( new Integer( 1234 ), new Integer( 5678 ) );
        // つまり、要素に入れる型は統一しなくてもOK
        System.out.println( hashMap.get( new Integer( 1234 ) ) );
        // 5678
        // また、このキーの使い方から分かるとおり、
        // キーかどうかは参照ではなくequals()で比較した結果を使用します。

        // どんな型でも入るのは危険です。
        try
        {
            Integer integer = (Integer)hashMap.get( "Integer" );
        }
        catch( ClassCastException e )
        {
            e.printStackTrace();
            // java.lang.ClassCastException
            //     at Sample.main(Sample.java:27)
        }

        // 最悪、戻り値の型として「複数の値を返す」目的に
        // 使われることもあります。
        HashMap badHashMap = getDatas();
        System.out.println( badHashMap.get( "string1" ) );
        // 文字列1
        System.out.println( badHashMap.get( "integer2" ) );
        // 200
        // この方法は「複数の値を戻り値として返せる」というメリットに対して、
        // 「メソッドの実装を見ないとキーも型もわからない」という
        // デメリットが非常に大きいです。
        // こういう使い方は絶対にしないようにしましょう。
    }

    /**
    *    HashMapを戻り値として返す例(悪例です。やっちゃダメよ)。
    */
    private static HashMap getDatas()
    {
        HashMap hashMap = new HashMap();
        // 変数名をキーにして、値をセットします。
        hashMap.put( "string1""文字列1" );
        hashMap.put( "integer2"new Integer( 200 ) );
        return hashMap;
    }
}
// Sample.java
import java.util.HashMap;

public class Sample
{
    public static void main( String[] args )
    {
        // HashMapを使用します。
        HashMap hashMap = new HashMap();
        // 要素を追加します。
        hashMap.put( "Integer", "整数値型だよ" );
        // 要素を取り出します。
        System.out.println( hashMap.get("Integer" ) );
        // 整数値型だよ

        // put()の引数はObjectなので、クラスならなんでも受け取れます。
        hashMap.put( new Integer( 1234 ), new Integer( 5678 ) );
        // つまり、要素に入れる型は統一しなくてもOK
        System.out.println( hashMap.get( new Integer( 1234 ) ) );
        // 5678
        // また、このキーの使い方から分かるとおり、
        // キーかどうかは参照ではなくequals()で比較した結果を使用します。

        // どんな型でも入るのは危険です。
        try
        {
            Integer integer = (Integer)hashMap.get( "Integer" );
        }
        catch( ClassCastException e )
        {
            e.printStackTrace();
            // java.lang.ClassCastException
            //     at Sample.main(Sample.java:27)
        }

        // 最悪、戻り値の型として「複数の値を返す」目的に
        // 使われることもあります。
        HashMap badHashMap = getDatas();
        System.out.println( badHashMap.get( "string1" ) );
        // 文字列1
        System.out.println( badHashMap.get( "integer2" ) );
        // 200
        // この方法は「複数の値を戻り値として返せる」というメリットに対して、
        // 「メソッドの実装を見ないとキーも型もわからない」という
        // デメリットが非常に大きいです。
        // こういう使い方は絶対にしないようにしましょう。
    }

    /**
    *    HashMapを戻り値として返す例(悪例です。やっちゃダメよ)。
    */
    private static HashMap getDatas()
    {
        HashMap hashMap = new HashMap();
        // 変数名をキーにして、値をセットします。
        hashMap.put( "string1", "文字列1" );
        hashMap.put( "integer2", new Integer( 200 ) );
        return hashMap;
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/04/28
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。