Collections 2. List Flashcards
List
List — это упорядоченный список.
Объекты хранятся в порядке их добавления в список.
Доступ к элементам списка осуществляется по индексу.
Диаграмма List
List<E> (интерфейс)
│
├── ArrayList<E> (динамический массив)
│
├── LinkedList<E> (двусвязный список)
│
├── Vector<E> (устаревший, синхронизированный)
│ │
│ └── Stack<E> (стек, LIFO)</E></E></E></E></E>
Краткое описание реализаций List
ArrayList<E> – основан на массиве, быстрый доступ по индексу (O(1)).
LinkedList<E> – двусвязный список, эффективное добавление/удаление (O(1)).
Vector<E> – аналог ArrayList, но потокобезопасный (устарел).
Stack<E> – реализует принцип LIFO (Last In, First Out).</E></E></E></E>
Чем List отличается от Set
List допускает дубликаты и элементы в нем хранятся в порядке добавления, а Set не допускает дубликатов.
Как безопасно удалить элементы из List во время итерации?
Использовать Iterator.remove() вместо remove()
Как работает метод equals для List
Метод equals сравнивает два списка поэлементно. Списки считаются равными, если они содержат одинаковые элементы в одинаковом порядке.
Как работает метод hashCode для List
Метод hashCode вычисляет хэш-код списка на основе хэш-кодов его элементов. Это позволяет использовать List в качестве ключа в HashMap
Как CopyOnWriteArrayList обеспечивает потокобезопасность
CopyOnWriteArrayList создает новую копию массива при каждой модификации (добавлении, удалении). Это позволяет читать данные без блокировок, но может быть затратно по памяти.