=
ホーム
On Your Mark
ホーム
/
設計(Java)
/
【Java】 Effective Java 第二版 お勉強 hashCode
2013年10月14日月曜日
Java
基本
設計(Java)
t
f
B!
P
L
# すべてのオブジェクトに共通のメソッド ## 今日 読んだところ P 45~50 ## 項目 equalsをオーバーライドする時は、常にhashCodeをオーバーライドする<br /> ## hashCodeの仕様(というか契約) 1.同じオブジェクトに対して、何度呼び出されてもhashCodeは常に同じ値を返さないといけない。<br /> <br /> 2.二つのオブジェクトがequalsでtrueならば、hashCodeも一致しなければならない。<br /> つまり、x.equals(y) がtrueならば、<br /> 必ずx.hashCode() == y.hashCode() がtrueにならなければならない。<br /> ## ということは equalsがオーバーライドされた場合、<br /> hashCodeの仕様上、hashCodeもオーバーライドしないとバグの原因になる可能性がある。<br /> そのため、equalsをオーバーライドする場合は、hashCodeもオーバーライドする。<br /> ## 例えばどんなバグがあるか hashCodeもオーバーライドしなかった場合、<br /> x.equals(y) がtrueになっても、x.hashCode() == y.hashCode() がfalseになる可能性がある。<br /> そのため、HashMapのキーとしてオブジェクトを設定した場合、<br /> hashCodeが違うため、キーが見つからずnullが返却されてしまう。<br /> ## HashCodeの作り方 とりあえず<br /> <pre> @override public int hashCode() { return 10; } </pre> のようなオーバーライドをしてはいけない。<br /> 当たり前だけど、すべてのオブジェクトが同じハッシュコードを持つことになるので、やってはいけない。<br /> ※例外があるか考えたけど、どんな場合か思いつかないので、まあまずこんな使い方はしないはず・・・<br /> <br /> では、どんな作り方が良いか<br /> <pre> result = 31 * result + c.hashCode(); </pre> がよさそうだ。<br />
Translate
このブログを検索
ブログアーカイブ
►
2020
(38)
6月 2020
(6)
5月 2020
(10)
4月 2020
(10)
3月 2020
(4)
2月 2020
(5)
1月 2020
(3)
►
2019
(4)
1月 2019
(4)
►
2018
(23)
12月 2018
(3)
4月 2018
(11)
3月 2018
(9)
►
2014
(20)
7月 2014
(3)
1月 2014
(17)
▼
2013
(166)
12月 2013
(15)
11月 2013
(22)
10月 2013
(31)
9月 2013
(26)
8月 2013
(32)
7月 2013
(40)
今週の人気の記事
【まとめ】GWはおうちでぬりえ 鉄道会社公式の電車ぬりえをまとめた
【まとめ】おうちでペーパークラフト 鉄道会社公式のペーパークラフトをまとめた
【PHP】PHPでSFTP接続
【MySQL】文字列をバイト数で切り取る
【調査】ゾンビランドサガ から佐賀に関連があるものを調べる 第4話
フォロワー
On Your Mark
QooQ
0 件のコメント:
コメントを投稿