Я задаюсь вопросом, что объяснение находится позади наличия Java Map.put(key, value)
перезапись метода эквивалентно key'd значения, которые уже находятся в наборе, в то время как Set.add(value)
не перезаписывает существующую ранее эквивалентную стоимость, которая уже находится в наборе?
Похоже, что точка зрения большинства состоит в том, что объекты в наборе, которые оценивают к равенству, должны быть равными во всех отношениях, таким образом не должно иметь значения, если Set.add (Объект) перезаписывает эквивалентно ценные объекты или нет. Если два объекта оценивают к равенству, но действительно на самом деле содержат различные данные, то набор типа Карты является более соответствующим контейнером.
Я несколько не соглашаюсь с этой точкой зрения.
Пример: набор, содержащий группу объектов "Человека". Для обновления некоторой информации о том человеке Вы могли бы хотеть передать набор новое, обновленный, человек возражает для перезаписи старого, устаревшего объекта человека. В этом случае Человек удержал бы первичную клавишу, которая определяет, что человек и набор идентифицировали бы и сравнили бы людей, базирующихся только на их первичных ключах. Этот первичный ключ является частью идентификационных данных человека в противоположность внешней ссылке, такой как Карта, подразумевал бы.
Поведение Map
позволяет изменять значения, связанные с эквивалентными ключами. Это довольно распространенный вариант использования: a: b
становится a: c
.
Да, перезапись содержимого Set
с помощью add
может что-то изменить (эталонное значение), но это кажется довольно узким вариантом использования (который в любом случае может быть выполнен - всегда пытайтесь удалить перед добавлением: s.remove (o); s.add (o);
) относительно того, что можно было бы получить в большинстве случаев - ничего для циклов.
edit:
единственное возможное применение, которое я мог видеть для этого поведения, - это ограниченный бюджет памяти, создание множества тяжелых, но эквивалентных объектов и наличие ссылок на разные равные версии в разных местах, предотвращение мусора сбор дубликатов. Однако, столкнувшись с этой проблемой раньше, я не думаю, что такое поведение даже лучший способ ее решить.
На мой взгляд, нет смысла перезаписывать что-то в Set, так как ничего не изменится.
Однако, когда вы обновляете карту, ключ может быть таким же, но значение может быть другим.
Я не согласен с предпосылкой вашего вопроса. И Map, и Set - абстрактные интерфейсы. Перезаписывают они или нет - это деталь реализации.