ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Objectの等価・ハッシュ

2007-02-28 23:27:55 | PG(Java)

Objectクラスについてメモ。
というか、等価(equals)ハッシュ(hashCode)についてのメモかな。
というか、HashMapについての文量が一番多いかもしれない(爆)

equals()を実装したら、hashCode()も実装しなきゃいけないなんて知らなかったな~。
その理由はハッシュテーブルで使うから、ということらしい。
ついでなので、以前から疑問だったHashMapの実装について調べてみた。

疑問というのは、ハッシュ値はその定義上、異なるオブジェクトであっても等しいハッシュ値が存在し得るということ。そういうハッシュ値をそのまま配列のインデックスとかに使えば、異なるオブジェクトが等しいとして扱われてしまう。
その辺り大丈夫だよな~?と思っていたが、確かに大丈夫だった。
ハッシュコードは、テーブルの最初のインデックス算出の他に、キー値が不一致であることの確認に使われている(定義からすれば当然だったね)。そして、最終的にはequalsでキー値が等しいことを確認している。
だからequals()とhashCode()をペアで定義しないといけないわけだ。
…ハッシュテーブルとかハッシュマップを使うならば(爆)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

java6の例外が便利に

2007-02-28 21:37:14 | PG(Java)

java6で変わった点として、OutOfMemroyErrorでスタックトレースが表示されるようになったことがあちこちに書かれていた。
確かにそれは便利。(というか、なんで今まで出なかったんだろう?)

もうひとつ、ClassCastExceptionのメッセージ出力も変わっていた(嬉)
キャスト元とキャスト先の両方のクラス名が表示されるようになった。
今まで(jre1.4まで)は、ClassCastExceptionをキャッチして変換元のオブジェクトのgetClass()を表示したり、無駄な事をしてたもんなぁ(苦笑)

他の例外にも、こういう変更はあるのかな??

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする