回答編集履歴

2

hashCode()を変更

2019/05/09 09:52

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -179,3 +179,33 @@
179
179
 
180
180
 
181
181
  Java の基礎として知ておくべき。調べたうえで疑問が残るなら、別の質問をポストしてください。
182
+
183
+
184
+
185
+ ### hashCode() を Effective Java にあわせる (2019-05-09)
186
+
187
+
188
+
189
+ J. Broch さんはこれがベストではないと断っていますが、Effective Java にあわせます。
190
+
191
+
192
+
193
+ ```Java
194
+
195
+ @Override
196
+
197
+ public int hashCode() {
198
+
199
+ int result = 17;
200
+
201
+ result = result * 31 + pk1.hashCode();
202
+
203
+ result = result * 31 + pk2.hashCode();
204
+
205
+ return result;
206
+
207
+ }
208
+
209
+ ```
210
+
211
+ pk1、pk2 はプライマリキーなので null になりえないことが前提です。また final な変数ゆえに1度だけ計算してキャッシュすることもできます。

1

追記

2019/05/09 09:52

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -151,3 +151,31 @@
151
151
  }
152
152
 
153
153
  ```
154
+
155
+
156
+
157
+ ### After のマージコンストラクター (2019-05-08)
158
+
159
+
160
+
161
+ Map.merge()を使うと map に格納する型が合わず型変換が必要になる。After のコンストラクターにマージ機能を持たせるほうが凝集度が高くなるし、畳み込みにより2件以上のマージができると判断。
162
+
163
+
164
+
165
+ ### キーオブジェクトの equals()/hashCode()、immutable (2019-05-08)
166
+
167
+
168
+
169
+ 参考書は『Effective Java』 第1版〜第3版 のどれでもよい、読んでみてください。
170
+
171
+
172
+
173
+ Mapのキーについての議論
174
+
175
+ [HashMap/Setにまつわる2つの事](http://d.hatena.ne.jp/a-hisame/20101227/1293467830)
176
+
177
+ [Immutable objects and hashmap keys](https://stackoverflow.com/questions/20212440/immutable-objects-and-hashmap-keys)
178
+
179
+
180
+
181
+ Java の基礎として知ておくべき。調べたうえで疑問が残るなら、別の質問をポストしてください。