equals() ではなく hashCode() が実装されているサンプルの 1 つで、メモリ リークのさまざまな理由を理解しようとしています。私はそれを読んだことがありますが、一方が乗り過ぎた場合、もう一方も契約違反のために乗り過ぎなければなりません。
これはサンプルコードです
import java.util.HashMap;
import java.util.Map;
public class MemoryLeak {
static class Key {
Integer id;
Key(Integer id) {
this.id = id;
}
@Override
public int hashCode() {
return id.hashCode();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Map m = new HashMap();
while (true)
for (int i = 0; i < 10000; i++)
if (!m.containsKey(i))
m.put(new Key(i), "Number:" + i);
}
}
equals() メソッドを意図的に実装していないことはわかっています。しかし、内部で何が起こっているのか、なぜメモリリークが発生するのかを理解したいと思います。
ありがとう