Hardchecked-collections
Что такое checked collection (Collections.checkedList)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Collections.checkedList/Set/Map — runtime-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 подскажет развёрнутый ответ в реальном времени.