teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

hashCode()を変更

2019/05/09 09:52

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -88,4 +88,19 @@
88
88
  [HashMap/Setにまつわる2つの事](http://d.hatena.ne.jp/a-hisame/20101227/1293467830)
89
89
  [Immutable objects and hashmap keys](https://stackoverflow.com/questions/20212440/immutable-objects-and-hashmap-keys)
90
90
 
91
- Java の基礎として知ておくべき。調べたうえで疑問が残るなら、別の質問をポストしてください。
91
+ Java の基礎として知ておくべき。調べたうえで疑問が残るなら、別の質問をポストしてください。
92
+
93
+ ### hashCode() を Effective Java にあわせる (2019-05-09)
94
+
95
+ J. Broch さんはこれがベストではないと断っていますが、Effective Java にあわせます。
96
+
97
+ ```Java
98
+ @Override
99
+ public int hashCode() {
100
+ int result = 17;
101
+ result = result * 31 + pk1.hashCode();
102
+ result = result * 31 + pk2.hashCode();
103
+ return result;
104
+ }
105
+ ```
106
+ pk1、pk2 はプライマリキーなので null になりえないことが前提です。また final な変数ゆえに1度だけ計算してキャッシュすることもできます。

1

追記

2019/05/09 09:52

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -74,4 +74,18 @@
74
74
  }
75
75
 
76
76
  }
77
- ```
77
+ ```
78
+
79
+ ### After のマージコンストラクター (2019-05-08)
80
+
81
+ Map.merge()を使うと map に格納する型が合わず型変換が必要になる。After のコンストラクターにマージ機能を持たせるほうが凝集度が高くなるし、畳み込みにより2件以上のマージができると判断。
82
+
83
+ ### キーオブジェクトの equals()/hashCode()、immutable (2019-05-08)
84
+
85
+ 参考書は『Effective Java』 第1版〜第3版 のどれでもよい、読んでみてください。
86
+
87
+ Mapのキーについての議論
88
+ [HashMap/Setにまつわる2つの事](http://d.hatena.ne.jp/a-hisame/20101227/1293467830)
89
+ [Immutable objects and hashmap keys](https://stackoverflow.com/questions/20212440/immutable-objects-and-hashmap-keys)
90
+
91
+ Java の基礎として知ておくべき。調べたうえで疑問が残るなら、別の質問をポストしてください。