Вопросы 141-150 для новичков и опытных разработчиков
Ответ: Collection и Collections звучат одинаково, но они совершенно разные:
// 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]
Ответ: Array и ArrayList - это две важные структуры данных в Java с несколько различиями:
| Характеристика | Array (Массив) | ArrayList |
|---|---|---|
| Размер | Фиксированный размер | Динамический размер |
| Итерация | for или for-each | Iterator или for-each |
| Получение размера | length - поле | size() - метод |
| Примитивные типы | Хранятся напрямую | Требуется autoboxing/unboxing |
| Производительность | Быстрее | Медленнее (из-за динамического размера) |
| Type Safety | Менее безопасен | Более безопасен с generics |
| Память | Более эффективен | Менее эффективен (дополнительная емкость) |
Ответ: Array и Collection - это два разных способа хранения группы объектов:
| Характеристика | Array (Массив) | Collections (Коллекции) |
|---|---|---|
| Размер | Фиксированный размер | Динамический размер |
| Расположение в памяти | Элементы в смежной памяти | Элементы не обязательно в смежной памяти |
| Тип данных | Примитивы и объекты | Только объекты |
| Изменение размера | Ручное изменение требуется | Автоматическое изменение размера |
| Методы | Базовые методы | Продвинутые методы (sort, filter и т.д.) |
| Введено в Java | С самого начала Java | Java 1.2 |
Ответ: ArrayList и LinkedList - это две реализации интерфейса List с разными внутренними структурами:
| Характеристика | ArrayList | LinkedList |
|---|---|---|
| Реализация | Динамический массив | Двусвязный список |
| Случайный доступ | Быстрый O(1) | Медленный O(n) |
| Вставка/Удаление | Медленно O(n) | Быстро O(1) |
| Расположение памяти | Смежная память | Несмежная память |
| Использование памяти | Более эффективно | Менее эффективно (нужны ссылки) |
| Когда использовать | Частый поиск и доступ | Частая вставка и удаление |
Ответ: ArrayList и Vector похожи, но имеют ключевые различия в синхронизации и производительности:
| Характеристика | ArrayList | Vector |
|---|---|---|
| Синхронизация | Не синхронизирован | Синхронизирован |
| Производительность | Быстрее для однопоточного | Медленнее (overhead синхронизации) |
| Многопоточность | Не рекомендуется | Рекомендуется |
| Введено в Java | Java 1.2 | JDK 1.0 (устаревший) |
| Размер приращения | На 50% (capacity * 1.5) | Удваивается (capacity * 2) |
| Рекомендация | Используйте всегда | Избегайте (устаревший класс) |
Ответ: 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() |
Ответ: HashMap и HashTable - это два класса для хранения пар ключ-значение, но с разными характеристиками:
| Характеристика | HashMap | HashTable |
|---|---|---|
| Синхронизация | Не синхронизирован | Синхронизирован |
| Null ключи/значения | Один null ключ, много null значений | Не допускает null |
| Итерация | Iterator | Iterator и Enumeration |
| Производительность | Быстрее | Медленнее |
| Многопоточность | Не рекомендуется | Рекомендуется |
| Введено в Java | Java 1.2 | JDK 1.0 (устаревший) |
| Рекомендация | Используйте всегда | Используйте ConcurrentHashMap вместо этого |
Ответ: 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 (устаревший) |
Ответ: 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);
}
}
Ответ: Set и Map - это две разные коллекции в Java Collections Framework:
| Характеристика | Set | Map |
|---|---|---|
| Структура данных | Коллекция уникальных элементов | Коллекция пар ключ-значение |
| Наследование | Расширяет Collection | Не расширяет Collection |
| Дублирующиеся элементы | Не допускает дублирующиеся элементы | Не допускает дублирующиеся ключи, но дублирующиеся значения |
| Null элементы | Set (HashSet, LinkedHashSet) допускает один null | HashMap допускает один null ключ и несколько null значений |
| Реализации | HashSet, LinkedHashSet, TreeSet | HashMap, LinkedHashMap, TreeMap |
| Использование | Хранение уникальных элементов | Хранение пар ключ-значение (словарь) |
| Пример | Коллекция уникальных имен | Телефонный справочник (имя -> номер) |