ハッシュ(連想配列)

  1. 目的
    キーを指定してインスタンスを登録します。キーを指定して読み出すことができます。数百程度の効率的な記録、検索ができます。

  2. 利用法
    1. 原理
      キー:keyを元に、簡単な計算を行い、登録場所を定めます。このときの計算関数をハッシュ関数と呼びます。読み出すときは、再度キーから登録場所を計算します。問題は、異なるキーに同じ場所が割り付けられる可能性があることで、この場合同じキーをもつ項目を先頭から順に検索します。

    2. 利用法
      Hashtableクラスを利用します。Stringのキー:lblとオブジェクト:pt1を対として、HashPoints.put(lbl1,pt1); で記録します。オブジェクトの型は任意です。

       Hashtable HashPoints=new Hashtable();
       String lbl1="p1";
       Point pt1=new Point(0,0);
       HashPoints.put(lbl1,pt1);

      読み出す時には、get()を利用しますが、このとき、取り出すオブジェクトのクラスを指定する必要があります。

       pt1=(Point)HashPoints.get(lbl1);

      キーを指定して削除を行うこともできます。

       HashPoints.remove(lbl1);
    3. 注意
       Hashtable で登録できるには、Object に限定されます。したがって、整数や少数派そのままでは保存できません。必要なら、Integerクラスのオブジェクトを生成し、これを保存します。詳細はVector の例を参照してください。

       Integer ip = new Integer();
       

  3. プログラム
    1. プログラム

      public class hash {
      
          public static void main(String[] args) {
              
              Hashtable HashPoints=new Hashtable();
              String lbl1="p1";
              Point pt1=new Point(0,0);
              HashPoints.put(lbl1,pt1);
              String lbl2="p2";
              Point pt2=new Point(0,0);
              HashPoints.put(lbl2,pt2);
              //
              pt1=(Point)HashPoints.get(lbl1);
              System.out.println(pt1);
              //
              HashPoints.remove(lbl1);
              pt1=(Point)HashPoints.get(lbl1);
              System.out.println(pt1);
              
          }
      }

    2. 実行結果
       二つのPointを記録し、一つを読み出します。削除後読み出すとnullが返ります。

      java.awt.Point[x=0,y=0]
      null