☕ Вопросы интервью по Java

Вопросы 141-150 для новичков и опытных разработчиков

Вопрос 141
Разница между Collection и Collections

Ответ: Collection и Collections звучат одинаково, но они совершенно разные:

Collection - это интерфейс:
  • Collection - это интерфейс в пакете java.util
  • Предоставляет стандартную функциональность структур данных
  • Методы включают add(), remove(), contains(), size() и т.д.
Collections - это класс:
  • Collections - это класс-помощник в пакете java.util
  • Используется для сортировки и синхронизации элементов коллекции
  • Предоставляет статические методы для различных операций
  • Примеры: sort(), shuffle(), reverse(), synchronizedList()
Пример:

// Collection - интерфейс
Collection<Integer> col = new ArrayList<>();
col.add(1);
col.add(2);

// Collections - класс с статическими методами
List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 2));
Collections.sort(list);  // Сортирует список
System.out.println(list);  // [1, 2, 3]
                
Вопрос 142
Разница между Array и ArrayList в Java

Ответ: Array и ArrayList - это две важные структуры данных в Java с несколько различиями:

Характеристика Array (Массив) ArrayList
Размер Фиксированный размер Динамический размер
Итерация for или for-each Iterator или for-each
Получение размера length - поле size() - метод
Примитивные типы Хранятся напрямую Требуется autoboxing/unboxing
Производительность Быстрее Медленнее (из-за динамического размера)
Type Safety Менее безопасен Более безопасен с generics
Память Более эффективен Менее эффективен (дополнительная емкость)
Вопрос 143
Разница между Array и Collection в Java

Ответ: Array и Collection - это два разных способа хранения группы объектов:

Характеристика Array (Массив) Collections (Коллекции)
Размер Фиксированный размер Динамический размер
Расположение в памяти Элементы в смежной памяти Элементы не обязательно в смежной памяти
Тип данных Примитивы и объекты Только объекты
Изменение размера Ручное изменение требуется Автоматическое изменение размера
Методы Базовые методы Продвинутые методы (sort, filter и т.д.)
Введено в Java С самого начала Java Java 1.2
Вопрос 144
Разница между ArrayList и LinkedList

Ответ: ArrayList и LinkedList - это две реализации интерфейса List с разными внутренними структурами:

Характеристика ArrayList LinkedList
Реализация Динамический массив Двусвязный список
Случайный доступ Быстрый O(1) Медленный O(n)
Вставка/Удаление Медленно O(n) Быстро O(1)
Расположение памяти Смежная память Несмежная память
Использование памяти Более эффективно Менее эффективно (нужны ссылки)
Когда использовать Частый поиск и доступ Частая вставка и удаление
Вопрос 145
Разница между ArrayList и Vector в Java

Ответ: ArrayList и Vector похожи, но имеют ключевые различия в синхронизации и производительности:

Характеристика ArrayList Vector
Синхронизация Не синхронизирован Синхронизирован
Производительность Быстрее для однопоточного Медленнее (overhead синхронизации)
Многопоточность Не рекомендуется Рекомендуется
Введено в Java Java 1.2 JDK 1.0 (устаревший)
Размер приращения На 50% (capacity * 1.5) Удваивается (capacity * 2)
Рекомендация Используйте всегда Избегайте (устаревший класс)
Вопрос 146
Разница между Iterator и ListIterator

Ответ: Iterator и ListIterator - это два интерфейса для обхода коллекций с разными возможностями:

Характеристика Iterator ListIterator
Направление обхода Только вперед Вперед и назад
Типы коллекций Collection, Map, Set Только List
Получение индекса Нельзя nextIndex(), previousIndex()
Модификация элементов Нельзя (только remove()) Можно (set(E e))
Добавление элементов Нельзя Можно (add(E e))
ConcurrentModificationException Выбрасывает Выбрасывает
Методы hasNext(), next(), remove() hasNext(), previous(), hasPrevious(), nextIndex(), previousIndex(), set(), add()
Вопрос 147
Разница между HashMap и HashTable

Ответ: HashMap и HashTable - это два класса для хранения пар ключ-значение, но с разными характеристиками:

Характеристика HashMap HashTable
Синхронизация Не синхронизирован Синхронизирован
Null ключи/значения Один null ключ, много null значений Не допускает null
Итерация Iterator Iterator и Enumeration
Производительность Быстрее Медленнее
Многопоточность Не рекомендуется Рекомендуется
Введено в Java Java 1.2 JDK 1.0 (устаревший)
Рекомендация Используйте всегда Используйте ConcurrentHashMap вместо этого
Вопрос 148
Разница между Iterator и Enumeration

Ответ: Iterator и Enumeration - это два интерфейса для обхода коллекций, но Iterator более современный:

Характеристика Iterator Enumeration
Поддержка коллекций Все коллекции Только старые коллекции (Vector, Hashtable)
Fail-Fast Да, выбрасывает ConcurrentModificationException Нет
Производительность Медленнее (из-за fail-fast проверок) Быстрее
Удаление элементов Можно (remove() метод) Нельзя
Методы hasNext(), next(), remove() hasMoreElements(), nextElement()
Безопасность типов Type-safe (с generics) Не type-safe
Новизна Java 1.2+ JDK 1.0 (устаревший)
Вопрос 149
Разница между Comparable и Comparator

Ответ: Comparable и Comparator - это два интерфейса для сортировки, но с разными подходами:

Характеристика Comparable Comparator
Пакет java.lang java.util
Метод compareTo() compare()
Тип сортировки Единственный порядок сортировки Несколько порядков сортировки
Расположение логики В классе объектов В отдельном классе
Влияние на класс Изменяет класс Не изменяет класс
Использование Collections.sort(list) Collections.sort(list, comparator)
Примеры в API String, Integer, Date Для сортировки третьих библиотек
Пример:

// Comparable - сортировка по возрасту
class Person implements Comparable<Person> {
    int age;
    public int compareTo(Person p) {
        return this.age - p.age;
    }
}

// Comparator - несколько способов сортировки
class AgeComparator implements Comparator<Person> {
    public int compare(Person p1, Person p2) {
        return p1.age - p2.age;
    }
}

class NameComparator implements Comparator<Person> {
    public int compare(Person p1, Person p2) {
        return p1.name.compareTo(p2.name);
    }
}
                
Вопрос 150
Разница между Set и Map

Ответ: Set и Map - это две разные коллекции в Java Collections Framework:

Характеристика Set Map
Структура данных Коллекция уникальных элементов Коллекция пар ключ-значение
Наследование Расширяет Collection Не расширяет Collection
Дублирующиеся элементы Не допускает дублирующиеся элементы Не допускает дублирующиеся ключи, но дублирующиеся значения
Null элементы Set (HashSet, LinkedHashSet) допускает один null HashMap допускает один null ключ и несколько null значений
Реализации HashSet, LinkedHashSet, TreeSet HashMap, LinkedHashMap, TreeMap
Использование Хранение уникальных элементов Хранение пар ключ-значение (словарь)
Пример Коллекция уникальных имен Телефонный справочник (имя -> номер)