Почему метод `add(E)` в Java Collections возвращает `boolean`?

«Почему метод `add(E)` в Java Collections возвращает `boolean`?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод add(E) возвращает boolean, чтобы сигнализировать об изменении коллекции в результате операции. Это особенно важно для коллекций, которые не допускают дубликатов (как Set), или ограниченных коллекций (как очередь с фиксированной ёмкостью).

Семантика возвращаемого значения:

  • true — коллекция была изменена (элемент добавлен).
  • false — коллекция осталась неизменной (элемент не был добавлен).

Примеры использования:

// 1. Set — добавление уникального элемента
Set<String> uniqueNames = new HashSet<>();
boolean added = uniqueNames.add("Alice"); // true
added = uniqueNames.add("Alice");        // false, дубликат не добавлен

// 2. List — обычно всегда возвращает true (дубликаты разрешены)
List<String> list = new ArrayList<>();
list.add("A"); // true
list.add("A"); // true

// 3. Ограниченная очередь (CapacityRestricted Queue)
Queue<Integer> boundedQueue = new ArrayBlockingQueue<>(2);
boundedQueue.add(1); // true
boundedQueue.add(2); // true
boundedQueue.add(3); // Выбрасывает IllegalStateException (если использовать add())
// Для безопасной проверки лучше использовать offer(), который возвращает false при переполнении

Практическая польза: Возвращаемое значение позволяет проверить успешность добавления без дополнительного вызова contains(), что делает код более эффективным и выразительным.