読者です 読者をやめる 読者になる 読者になる

謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

JavaのHashMapを調べてみた

Java

JavaHashMapの使い方がアレなので少し調べてみた。

import java.util.*;

class sample {
   public static void main(String[] args){
      HashMap<String,String> hm = new HashMap<String,String>();
      hm.put("sample","message");
      String a = hm.get("sample");
   }
}

コンパイルして、逆コンパイルする。

import java.util.HashMap;

class sample {
   public static void main(String[] args){
      HashMap hm = new HashMap();
      hm.put("sample","message");
      String s = (String)hm.get("sample");
   }
}

に書き変わってる。
なるほど、Generic実装って要はコンパイラが面倒見てるのね、、、。

ついでに、put と get について見てみる。
ポインタ比較には思えないし、単純な実体比較だと速度的にアレでしょ、、、、

で、見つけた結果は以下のような感じ。

  • 基本的にObjectクラスの hashCode() 関数を使って、帰ってきた整数で内部配列への入出力を行う。
  • hashCode() の一致を取った後、equals(Object obj) で一致確認を取る。

実体比較は最小限にしてるわけね、、、

因みに、hashCode() は String ではオーバーライドしてた。
APIリファレンスに載ってるし、暇なら見てみると良いかも?