Google検索エンジン

トップページ » Javaプログラミング講座(応用編) » HashMapの使い方


HashMapの使い方

  • HashMapを使用するときは、まず「java.util.HashMap」をインポートします。 JDK5.0以降は、ジェネリクスが導入されていますので、「new HashMap<String, String>」のように、インスタンス化する時点で「マップのキーの型」と「格納するデータの型」の両方を指定する必要があります。 書式は、「HashMap<キーの型, 値の型>」となります。 逆にJDK5.0以降は、値を取り出すときにキャストする必要がありません。

    JDK5.0から、新機能としてジェネリクスが導入されました。 ジェネリクスとは、「総称性(Genericity)」「ジェネリック・プログラミング」とも呼ばれるプログラミング技法で、オブジェクト指向とは異なるパラダイムからきたものです。 データの型に束縛されず、型そのものをパラメータ化して扱うことができます。 主にコレクションクラスに導入されています。

    Javaのコレクションのほとんどは、格納できるデータの型を限定しません。 JDK5.0より前は、型を限定できないためにget()メソッドで値を取り出す際に、キャストするのが普通でした。

    HashMapクラスは、Hashtableクラスと同じとみなしてもかまいませんが、HashMapの方は同期がとられず、値がnullの場合もあります。 HashMapはマップの順序を保証していないので、キーを指定して値を格納したり、値を取り出したりします。 同期をとる必要のないプログラムの場合は、Hashtableクラスを利用するよりHashMapクラスを利用した方が、リソースが節約できます。


    サンプルソースコード
    import java.util.HashMap;
    
    class sample {
        public static void main(String args[]) {
    
            if ( args.length == 0 ) {
                System.out.println( "パラメータが未指定です。" );
                return;
            }
    
            //キーを文字列型、値を文字列型に指定
            HashMap<String, String> map1 = new HashMap<String, String>();
    
            map1.put( "キー", args[0] );
    
            String text1 = map1.get( "キー" );
            System.out.println( "最初に指定した値:"+ text1 );
    
            //キーを数値型、値を文字列型に指定
            HashMap<Integer, String> map2 = new HashMap<Integer, String>();
    
            for ( int i = 0; i < args.length; i++ ) {
                map2.put( i, args[i] );
            }
    
            System.out.println( map2.keySet() );// 全てのキーを出力
            System.out.println( map2.values() );// 全ての値を出力
    
            for ( int i = 0; i < map2.size(); i++ ) {
                //キャスト不要
                String text2 = map2.get(i);
                System.out.println( text2 );
            }
        }
    }
    

    サンプルソースをみるとmap1をインスタンス化する際、<>の中にString, Stringを指定してインスタンス化しています。 このようにしてStringをキーとして、Stringのみを格納できるHashMapを作成しています。

    また、map2をインスタンス化する際、<>の中にInteger, Stringを指定してインスタンス化しています。 このようにしてIntegerをキーとして、Stringのみを格納できるHashMapを作成しています。

    指定した型以外をキーにしたり、指定した型以外の値を格納しようとすると、コンパイルエラーになり「予期しない型」と表示されます。 Stringのみを格納できるHashMapを作成した場合は、put()メソッドでHashMapに追加できるオブジェクトはStringのみになり、get()メソッドで返されるオブジェクトもStringのみとなります。

    上記を踏まえて、JavaのAPI「java.util.HashMap」を確認してみてください。 きっと、HashMapクラスの使い方を理解できるでしょう。



Javaプログラミング講座(応用編)
書籍の紹介
  • Java ポケットリファレンス
    Java ポケットリファレンス
    発売:2011/03/25
    定価:2,709円
    著者:高江 賢
    出版:技術評論社
    内容:ベーシックだけど忘れてしまいがちな情報をコンパクトなサイズに凝縮し、「逆引き形式で目的からすぐ探せる」「サンプルコードを見ながら具体的な実装のイメージがつかめる」特徴で現場に欠かせない1冊です。
  • プログラマが知るべき97のこと
    プログラマが知るべき97のこと
    発売:2010/12/18
    定価:1,995円
    著者:和田 卓人
    出版:オライリージャパン
    内容:世界中で活躍するプログラマによる97本のエッセイを収録した書籍です。プログラミングにおいてもっとも重要な事柄は何か、バージョン管理やテスティング、設計原則とコーディングテクニック、また腕を磨くための勉強法などについて、経験豊かなプログラマが自らの体験を踏まえて解説します。
  • プログラミング言語Java (The Java Series)
    プログラミング言語Java
    発売:2007/04
    定価:4,410円
    著者:ケン・アーノルド他
    出版:ピアソンエデュケーション
    内容:Javaの原典と呼べる本です。変数、コメント、定数、制御、クラス、配列、文字列、例外処理までわずか30ページで進むので、Javaを学習し始めたばかりの方には少し難しいかもしれません。厚さの割に価格も手ごろなので、Java使いなら本棚に置いておきたい本です。
  • なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング
    なぜ、あなたはJavaでオブジェクト指向開発ができないのか
    発売:2004/12
    定価:2,289円
    著者:小森 裕介
    出版:技術評論社
    内容:Javaプログラミング言語習得において、新人プログラマーの最初の障害は「オブジェクト指向の壁」です。Javaのソフトウェア開発を中心に事業を発展させてきたSMG社の新人教育セミナーを加筆・書籍化したもので、大卒の新人に対して、ゼロからJava言語を教えてきた実績をフィードバックしています。