← Назад к вопросам

Какие есть интерфейсы в Collection фреймворке?

2.0 Middle🔥 201 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Collection фреймворк: основные интерфейсы

Collection фреймворк — это фундаментальная часть Java API, предоставляющая унифицированную архитектуру для работы с группами объектов. Понимание иерархии интерфейсов критически важно для эффективной разработки.

Главная иерархия

Все интерфейсы Collection фреймворка наследуют из Iterable — это корневой интерфейс, определяющий возможность итерации:

public interface Iterable<T> {
    Iterator<T> iterator();
}

Далее идёт интерфейс Collection<E> — основная абстракция для всех коллекций:

public interface Collection<E> extends Iterable<E> {
    int size();
    boolean isEmpty();
    boolean contains(Object o);
    boolean add(E e);
    boolean remove(Object o);
    void clear();
    Iterator<E> iterator();
}

Основные ветви

List<E> — упорядоченная коллекция, позволяющая доступ по индексу. Гарантирует сохранение порядка элементов:

public interface List<E> extends Collection<E> {
    E get(int index);
    E set(int index, E element);
    void add(int index, E element);
    E remove(int index);
    int indexOf(Object o);
}

Реализации: ArrayList (динамический массив), LinkedList (двусвязный список), Vector (синхронизированный, устарел), CopyOnWriteArrayList (потокобезопасный).

Set<E> — коллекция без дубликатов. Математическое множество:

public interface Set<E> extends Collection<E> {
    // Методы те же, что в Collection, но не допускают дубликатов
    boolean add(E e);  // вернёт false если элемент уже есть
}

Реализации: HashSet (на базе HashMap, O(1)), LinkedHashSet (сохраняет порядок), TreeSet (отсортированный, O(log n)), EnumSet (для перечислений, очень быстрый).

Queue<E> — коллекция с поддержкой операций в стиле очереди (FIFO):

public interface Queue<E> extends Collection<E> {
    E element();      // исключение если пусто
    E peek();         // null если пусто
    E remove();       // исключение если пусто
    E poll();         // null если пусто
    boolean offer(E e);
}

Реализации: LinkedList, PriorityQueue (по приоритету), Deque (очередь в обе стороны).

Map<K, V> — ассоциативный массив (отдельная иерархия, не наследует Collection):

public interface Map<K, V> {
    V put(K key, V value);
    V get(Object key);
    V remove(Object key);
    Set<K> keySet();
    Collection<V> values();
    Set<Map.Entry<K, V>> entrySet();
}

Реализации: HashMap, LinkedHashMap, TreeMap, Hashtable (устарел), WeakHashMap, IdentityHashMap.

Потокобезопасные альтернативы

Для многопоточной среды используй Collections.synchronizedXXX() или классы из пакета java.util.concurrent:

List<String> syncList = Collections.synchronizedList(new ArrayList<>());
Set<String> syncSet = Collections.synchronizedSet(new HashSet<>());
Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());

// Новое поколение:
List<String> concurrent = new CopyOnWriteArrayList<>();
Set<String> concurrent = new ConcurrentHashMap<>().keySet();

Выбор реализации

  • Нужна скорость доступа по индексу?ArrayList
  • Часто вставляешь/удаляешь в начало/конец?LinkedList
  • Требуется уникальность элементов?HashSet
  • Нужен отсортированный set?TreeSet
  • Нужна очередь по приоритету?PriorityQueue
  • Много чтений, редкие записи?CopyOnWriteArrayList
  • Мультипоточность?ConcurrentHashMap, CopyOnWriteArrayList

Иерархия Collection фреймворка проектировалась с учётом принципа наименьших обязательств — каждый интерфейс добавляет необходимые гарантии, но не требует лишнего.