Hardchecked-collections

Что такое checked collection (Collections.checkedList)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Collections.checkedList/Set/Mapruntime-checked wrappers для generic коллекций. Цель — защита от heap pollution через raw types.

List<String> list = Collections.checkedList(new ArrayList<>(), String.class);

// Legacy код через raw type пытается добавить Integer
List raw = list;
raw.add(Integer.valueOf(42));   // ClassCastException в runtime при добавлении

Heap pollution — без checked wrapper:

List<String> l = new ArrayList<>();
List raw = l;
raw.add(42);              // добавится (heap pollution!)
l.get(0).length();        // ClassCastException позже при чтении
  • Применение — для коллекций, передаваемых в legacy/public API без generics;
  • Varargs + generics — типичная причина heap pollution, @SafeVarargs подавляет warning;
  • Не нужны, если не смешиваешь raw и generic код;
  • Collections.unmodifiableList — read-only wrapper (бросает UnsupportedOperationException).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.