Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Иерархия коллекций в Java
Общая структура
Все коллекции в Java наследуют от интерфейса Iterable, через который можно итерироваться.
Основной интерфейс: Collection
Collection — базовый интерфейс для всех коллекций (кроме Map):
Iterable
└── Collection
├── List
├── Set
└── Queue
List (Список)
Упорядоченная коллекция, доступ по индексу:
List<String> list = new ArrayList<>(); // Динамический массив
list = new LinkedList<>(); // Связный список
list = new Vector<>(); // Потокобезопасный список
list = new Stack<>(); // Стек (LIFO)
list.add("John"); // Добавить
list.get(0); // Получить по индексу
list.remove(0); // Удалить
list.size(); // Размер
Реализации:
- ArrayList — быстрый доступ, медленное удаление
- LinkedList — быстрое удаление, медленный доступ
- Vector — потокобезопасный (устарел)
- Stack — стек (LIFO)
Set (Множество)
Без дубликатов, быстрая проверка принадлежности:
Set<String> set = new HashSet<>(); // Без порядка, быстро
set = new LinkedHashSet<>(); // Сохраняет порядок
set = new TreeSet<>(); // Отсортировано
set.add("apple"); // Добавить
set.contains("apple"); // Проверить
set.remove("apple"); // Удалить
Реализации:
- HashSet — быстрая проверка O(1)
- LinkedHashSet — сохраняет порядок вставки
- TreeSet — отсортировано по comparator
Queue (Очередь)
FIFO (First In First Out) порядок:
Queue<String> queue = new LinkedList<>();
queue = new PriorityQueue<>(); // По приоритету
queue.add("first"); // Добавить
queue.poll(); // Получить и удалить
queue.peek(); // Получить без удаления
Реализации:
- LinkedList — обычная очередь
- PriorityQueue — по приоритету
Map (Словарь)
Пары ключ-значение (не наследует Collection!):
Map<String, Integer> map = new HashMap<>(); // Без порядка
map = new LinkedHashMap<>(); // Сохраняет порядок
map = new TreeMap<>(); // Отсортировано
map = new Hashtable<>(); // Потокобезопасный
map.put("age", 30); // Добавить
map.get("age"); // Получить
map.remove("age"); // Удалить
map.containsKey("age"); // Проверить ключ
map.values(); // Все значения
map.keySet(); // Все ключи
map.entrySet(); // Пары ключ-значение
Реализации:
- HashMap — быстрый поиск O(1)
- LinkedHashMap — сохраняет порядок вставки
- TreeMap — отсортировано по ключам
- Hashtable — потокобезопасный (устарел)
Полная диаграмма
Iterable
│
├─ Collection
│ ├─ List (упорядоченная)
│ │ ├─ ArrayList
│ │ ├─ LinkedList
│ │ ├─ Vector
│ │ └─ Stack
│ │
│ ├─ Set (без дубликатов)
│ │ ├─ HashSet
│ │ ├─ LinkedHashSet
│ │ └─ TreeSet
│ │
│ └─ Queue (очередь)
│ ├─ LinkedList
│ └─ PriorityQueue
│
└─ Map (ключ-значение)
├─ HashMap
├─ LinkedHashMap
├─ TreeMap
└─ Hashtable
Используется в тестировании
import org.junit.Test;
import static org.junit.Assert.*;
public class CollectionsTest {
@Test
public void testList() {
List<String> list = new ArrayList<>();
list.add("John");
list.add("Jane");
assertEquals(2, list.size());
assertEquals("John", list.get(0));
}
@Test
public void testSet() {
Set<String> set = new HashSet<>();
set.add("apple");
set.add("apple"); // Дубликат
assertEquals(1, set.size()); // Только одно значение
}
@Test
public void testMap() {
Map<String, Integer> map = new HashMap<>();
map.put("John", 30);
map.put("Jane", 25);
assertEquals(Integer.valueOf(30), map.get("John"));
assertTrue(map.containsKey("Jane"));
}
}
Производительность
| Коллекция | Добавление | Удаление | Поиск |
|---|---|---|---|
| ArrayList | O(1) | O(n) | O(n) |
| LinkedList | O(1) | O(1) | O(n) |
| HashSet | O(1) | O(1) | O(1) |
| TreeSet | O(log n) | O(log n) | O(log n) |
| HashMap | O(1) | O(1) | O(1) |
| TreeMap | O(log n) | O(log n) | O(log n) |
Итерация
List<String> list = Arrays.asList("John", "Jane", "Bob");
// for-each
for (String name : list) {
System.out.println(name);
}
// Iterator
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// Stream API (Java 8+)
list.forEach(System.out::println);
list.stream()
.filter(name -> name.startsWith("J"))
.forEach(System.out::println);
Для QA в Java тестировании: используй ArrayList для большинства случаев, HashMap для поиска по ключу, HashSet для проверки уникальности.