После сериализации Hashcode изменился для объекта, который используется как ключ HashMap [дубликат]

Если вы используете пакет dplyr , вы можете сделать:

  library (dplyr) filter (df, age & lt; = laclen)  
2
задан Vipin Pillai 15 August 2011 в 16:50
поделиться

1 ответ

Реализация hashcode по умолчанию эквивалентна идентичности объекта. Однако некоторые объекты переопределяют hashcode, что может дать вам хэш-код, который изменяется в зависимости от состояния объекта.

Обычно вы делаете это, если вы переопределяете определение equals (на самом деле, если вы переопределяете равные вам переопределить hashcode). Это потому, что вы хотите, чтобы объекты, которые были равны по любому определению, которое вы создали, возвратили тот же хэш-код. В противном случае вы можете иметь ситуацию, когда карта содержит несколько «равных» объектов, потому что они возвращают разные хэш-коды.

2
ответ дан Steve B. 17 August 2018 в 12:37
поделиться
  • 1
    Или, что еще хуже, хэш-код объекта изменяется, пока он находится на карте, и вы теряете эту внешнюю ссылку. Единственный способ вернуть его - это перебрать карту и сделать равным по вашим критериям. – corsiKa 15 August 2011 в 16:56
  • 2
    Это действительно очень неприятная мысль - я никогда не беспокоился об этой конкретной возможности, но теперь я это сделаю. Отличное имя, кстати. – Steve B. 15 August 2011 в 17:00
Другие вопросы по тегам:

Похожие вопросы: