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