ObjectクラスのhashCodeの戻り値(ハッシュ値)、OCJPの問題集だと「オブジェクトを検索する際のパフォーマンス向上させる目的で使われる」ってあるけどほんと?
2017-08-17 10:15:27javadoc見ると「ハッシュ表の利点のためにサポートされます」てあるのがこのパフォーマンス向上にかかってくるのかな docs.oracle.com/javase/jp/8/do…
2017-08-17 10:16:13@zer0_u ハッシュ値が等しいからといってequalsが等しいわけでもないですからね。 古典的なハッシュテーブルのアルゴリズムで必要なハッシュ関数がObject#hashCode()ですよ、というのがJavaの設計かと
2017-08-17 10:19:18ハッシュテーブルのための値だから、定義?注意点?に「equalsメソッドに従って2つのオブジェクトが等しい場合は」って出てくるのか〜 equalsのための値だと思ってたからなんか変だなーって気になってたんだよ
2017-08-17 10:26:04@zer0_u HashMapとかではまずハッシュ値で走査して候補を絞って、その後equalsで特定する動きをしますね。 32bit の intの範囲でhash値を用意する以上、ハッシュ値の衝突は避けえません
2017-08-17 10:28:47JavaのObjectクラスにhashCode()があるのは、昔から違和感があるんだよなー。HashMapのキーにする為なら、その為のインターフェースを用意すべきだったんじゃ…。
2017-08-17 10:24:02まあ1.0でObjectにhashCode()を用意してしまったからには、それを取り除いて改定というのはやりにくかったのかもなあとは思いますね
2017-08-17 10:26:17HashMapがどういう作りになっているかは、昔調べたことがあるなー。ne.jp/asahi/hishidam… Java8でも同じかどうかは確認してない^^;
2017-08-17 10:30:42@hishidama @megascus へー。これは抑えてなかった。 docs.oracle.com/javase/jp/8/do… javadocでは「これは通常、オブジェクトの内部アドレスを整数に変換することによって実装されます」とありますね。変換が乱数ということか
2017-08-17 10:37:56@bufferings @irof ObjectにhashCodeとequalsがあるの、マジ設計ミスだと思う(色んなアレで仕方がなかったのかもしれないけれど)
2017-04-06 23:41:05他の言語ではどうなっているか
@togetter_jp これ、C#(というか .NET) でもそうで、GetHashCodeの実装がいいかげん(return 1固定とか)だとDictionaryの検索パフォーマンスが落ちる、とか
2017-08-17 10:54:17@togetter_jp インスタンス生成してからオブジェクトの内部状態によってGetHashCodeの値が変わるような実装にしていると、Dictionaryから取りだせなくなるからダメって聞いたからそれは注意してるけど、実際試したことはない
2017-08-17 10:55:54