Мне интересно, в чем причина того, что Java Map.put(key, value)
перезаписывает эквивалентно ключевые значения, которые уже находятся в коллекции, в то время как Set.add(value)
не перезаписывает ранее существующее эквивалентное значение, которое уже находится в коллекции?
Редактировать:
Похоже, что точка зрения большинства состоит в том, что объекты в наборе, которые оценивают равенство, должны быть равны во всех отношениях, поэтому не должно иметь значения, переписывает ли Set.add (Object)равноценные объекты или нет.Если два объекта оцениваются на равенство, но на самом деле содержат разные данные, тогда коллекция типа Map является более подходящим контейнером.
Я несколько не согласен с этой точкой зрения.
Пример: набор, содержащий группу объектов "Персона".Чтобы обновить некоторую информацию об этом человеке, вы можете передать в набор новый обновленный объект персоны, чтобы перезаписать старый, устаревший объект персоны.В этом случае Person будет иметь первичный ключ, который идентифицирует этого человека, и набор будет идентифицировать и сравнивать людей только на основе их первичных ключей.Этот первичный ключ является частью личности человека, в отличие от внешней ссылки, такой как карта.