Почему метод replace () не определен в интерфейсе Set?
Я могу думать о трех причинах:
Функционально избыточен: set.replace(old, nu)
это просто if (set.remove(old)) { set.add(nu) }
например.
Поведение в случае, когда old
отсутствует, добавляет осложнения.
Добавление replace
к API Set
заставляет все реализации Set
реализовать (избыточный) метод.
Может даже быть, что есть более глубокие причины; например делать с реализуемостью replace
в некоторых неясных случаях.
Однако, как указали другие, ваш вариант использования вообще не требует replace
. Ваш код имеет тот же эффект (*), что и этот:
Set myset = ...
myset.add(element);
(* На самом деле вы могли бы обнаружить разницу, если ваш метод element.equals(Object)
сравнивает объекты объекта поле за полем. В зависимости от реализации Set, вы можете получить разные ссылки на объекты в наборах после выполнения двух последовательностей кода. Но, IMO, вы бы напрашивались на неприятности, если бы делали предположения о подобных вещах!)