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

Какой базовый интерфейс для интерфейса Collection?

1.3 Junior🔥 241 комментариев
#Коллекции

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

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

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

Базовый интерфейс для Collection

Иерархия интерфейсов

Интерфейс Collection является базовым для всех коллекций в Java Collections Framework, но в свою очередь Collection наследует интерфейс Iterable.

Iterable<T>
    ↓
Collection<E> (базовый интерфейс)
    ├── List<E> (упорядоченная коллекция)
    │   ├── ArrayList<E>
    │   ├── LinkedList<E>
    │   └── Vector<E>
    ├── Set<E> (коллекция без дубликатов)
    │   ├── HashSet<E>
    │   ├── TreeSet<E>
    │   └── LinkedHashSet<E>
    └── Queue<E> (очередь)
        ├── PriorityQueue<E>
        ├── Deque<E> (двусторонняя очередь)
        │   ├── ArrayDeque<E>
        │   └── LinkedList<E>

Интерфейс Iterable

Это самый верхний интерфейс в иерархии:

public interface Iterable<T> {
    Iterator<T> iterator();
    void forEach(Consumer<? super T> action);
    Spliterator<T> spliterator();
}

Интерфейс Iterable позволяет использовать расширенный for цикл (for-each) и получать Iterator для перебора элементов.

Интерфейс Collection

Collection наследует Iterable и добавляет методы для управления коллекциями:

public interface Collection<E> extends Iterable<E> {
    // Добавление элементов
    boolean add(E e);
    boolean addAll(Collection<? extends E> c);
    
    // Удаление элементов
    boolean remove(Object o);
    boolean removeAll(Collection<?> c);
    void clear();
    
    // Проверка содержимого
    int size();
    boolean isEmpty();
    boolean contains(Object o);
    boolean containsAll(Collection<?> c);
    
    // Преобразование
    Object[] toArray();
    <T> T[] toArray(T[] a);
    
    // Итерация
    Iterator<E> iterator();
    
    // Stream API (Java 8+)
    default Stream<E> stream();
    default Stream<E> parallelStream();
}

Практические примеры

Пример 1: Работа с Collection интерфейсом

// Collection может быть List, Set или Queue
Collection<String> collection = new ArrayList<>();
collection.add("Hello");
collection.add("World");

// Итерация через forEach
for (String item : collection) {
    System.out.println(item);
}

// Итерация через iterator
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

// Stream API
collection.stream()
    .map(String::toUpperCase)
    .forEach(System.out::println);

Пример 2: Метод принимает Collection

public void printCollection(Collection<String> items) {
    System.out.println("Size: " + items.size());
    
    for (String item : items) {
        System.out.println(item);
    }
    
    System.out.println("Contains 'Test': " + items.contains("Test"));
}

// Метод работает с любой коллекцией
printCollection(new ArrayList<>(Arrays.asList("A", "B", "C")));
printCollection(new HashSet<>(Arrays.asList("X", "Y", "Z")));
printCollection(new LinkedList<>(Arrays.asList("1", "2", "3")));

Пример 3: Общие операции

Collection<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// Получение размера
System.out.println("Size: " + numbers.size()); // 5

// Проверка содержимого
if (numbers.contains(3)) {
    System.out.println("Contains 3");
}

// Преобразование в массив
Integer[] array = numbers.toArray(new Integer[0]);

// Фильтрация
Collection<Integer> evenNumbers = numbers.stream()
    .filter(n -> n % 2 == 0)
    .collect(Collectors.toList());

Основные методы Collection

МетодОписание
add(E)Добавляет элемент
remove(Object)Удаляет элемент
contains(Object)Проверяет наличие элемента
size()Возвращает размер
isEmpty()Проверяет, пуста ли коллекция
clear()Удаляет все элементы
iterator()Возвращает Iterator
stream()Возвращает Stream (Java 8+)

Ключевые отличия подтипов

List — упорядоченная коллекция, допускает дубликаты:

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("A"); // Дубликат разрешён
System.out.println(list.get(0)); // "A"

Set — коллекция без дубликатов:

Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A"); // Не добавится
System.out.println(set.size()); // 2

Queue — очередь с FIFO порядком:

Queue<String> queue = new LinkedList<>();
queue.add("First");
queue.add("Second");
System.out.println(queue.poll()); // "First"
System.out.println(queue.poll()); // "Second"

Правила использования Collection

  1. Используй Collection для типизированного доступа к коллекциям
  2. Методы должны принимать Collection, а не конкретную реализацию
  3. Не полагайся на порядок элементов (используй List если нужен порядок)
  4. Помни о null значениях (Set не допускает null, List допускает)
  5. Используй Stream API для сложных операций над коллекциями

Производительность

ОперацияArrayListLinkedListHashSet
AddO(1)O(1)O(1)
RemoveO(n)O(1)O(1)
GetO(1)O(n)-
ContainsO(n)O(n)O(1)

Collection интерфейс — основа Java Collections Framework, обеспечивает единый способ работы со всеми типами коллекций.