天蓬老师2017-04-18 10:45:24
Map의 원리를 살펴보는 것이 좋습니다
map이 값을 저장할 때 객체의 주소가 아닌 객체의 해시코드를 사용합니다
먼저 p1을 키로 넣습니다.
그리고 p1의 값이 변경되면 p1의 해시코드가 변경되어 다시 저장될 때 map은 다른 키라고 생각하여 저장합니다.
PHP中文网2017-04-18 10:45:24
다음은 HashMap.put의 내부 구현입니다
으아아아p1.setAge(5) 이후에는 p1의 hashCode가 변경되고, 위 함수의 hash(key)가 변경됩니다. 비록 키가 동일한 객체이더라도 HashMap은 이를 계속해서 새로운 키로 저장합니다.
효율성상의 이유로 이 시나리오는 지원되지 않습니다. 이는 HashMap의 함정이라고 볼 수 있습니다.