Глядя на javadoc, я увидел, что ArrayList имеет перегруженный метод добавления:
public boolean add (E e)
Добавляет указанный элемент в конец этого списка.
и
public void add (индекс int, E)
Вставляет указанный элемент в указанную позицию в этом списке. Сдвигает элемент в данный момент (если есть) и любые последующие элементы справа (добавляет один к их индексам).
Я заметил, что первая вернула boolean
, а вторая - void
. Как оказалось, первый add
должен возвращать a boolean
, потому что:
Возвращает: true (как указано в Collection.add(E))
Итак, я пошел в Collection.add(E):
boolean add (E e)
Обеспечивает, чтобы эта коллекция содержала указанный элемент (дополнительная операция). Возвращает true, если эта коллекция изменилась в результате вызова. (Возвращает false, если эта коллекция не позволяет дублировать и уже содержит указанный элемент.)
Итак, мой вопрос: почему указано add
для возврата boolean вместо того, чтобы быть пустотой? Когда я add
что-то, я ожидал бы сделать только операцию.
Я понимаю, что существуют другие структуры данных, которые, в отличие от ArrayList, не допускают дубликатов (например, наборов). Но даже тогда проблема не могла быть решена в соответствии с:
public void add(E e){
if(e is not in set){
add e;
}
}
Таким образом, если e
IS в наборе не предпринимается никаких действий. Почему лучше возвращать boolean
вместо подхода void
?