У чому полягає переваги незмінних колекцій




У чому полягає переваги незмінних колекцій



Java - колекції (Collections). Запитання та відповіді.

Список питань та відповідей на тему “Колекції в Java”, що використовуються на співбесіді.

Запитання

  1. Дайте визначення поняття "колекція".
  2. Назвіть переваги використання колекцій.
  3. Які дані можуть зберігати колекції?
  4. Яка ієрархія колекцій?
  5. Що ви знаєте про колекції типу List?
  6. Що ви знаєте про колекції типу Set?
  7. Що ви знаєте про колекції типу Queue?
  8. Що ви знаєте про колекції типу Map, у чому їхня принципова відмінність?
  9. Назвіть основні реалізації List, Set, Map.
  10. Які реалізації SortedSet ви знаєте і в чому їхня особливість?
  11. У чому відмінності/подібності List та Set?
  12. Що різного/загального у класів ArrayList та LinkedList, коли краще використовувати ArrayList, а коли LinkedList?
  13. У яких випадках розумно використовувати масив, а чи не ArrayList?
  14. Чим відрізняється ArrayList від Vector?
  15. Що ви знаєте про реалізацію класів HashSet та TreeSet?
  16. Чим відрізняються HashMap та TreeMap? Як вони влаштовані та працюють? Що з часом доступ до об'єктів, які залежності?
  17. Що таке Hashtable, чим вона відрізняється від HashMap? На сьогоднішній день вона deprecated, як все-таки використовувати потрібну функціональність?
  18. Що буде, якщо в Map покласти два значення з однаковим ключем?
  19. Як задається порядок проходження об'єктів у колекції, як відсортувати колекцію?
  20. Дайте визначення поняття "ітератор".
  21. Яку функціональність є клас Collections?
  22. Як отримати колекцію, що не модифікується?
  23. Які колекції синхронізовані?
  24. Як отримати синхронізовану колекцію із несинхронізованої?
  25. Як отримати колекцію лише для читання?
  26. Чому Map не успадковується від Collection?
  27. У чому різниця між Iterator та Enumeration?
  28. Як реалізовано цикл foreach?
  29. Чому немає методу iterator.add(), щоб додати елементи до колекції?
  30. Чому в класі iterator немає методу отримання наступного елемента без пересування курсора?
  31. У чому різниця між Iterator та ListIterator?
  32. Які способи перебору всіх елементів List?
  33. У чому різниця між fail-safe та fail-fast властивостями?
  34. Що робити, щоб не було виключення ConcurrentModificationException?
  35. Що таке стек і черга, розкажіть у чому їх відмінності?
  36. У чому різниця між інтерфейсами Comparable та Comparator?
  37. Чому колекції не успадковують інтерфейси Cloneable та Serializable?

Відповіді

Тема колекцій неймовірно велика і для того, щоб відповісти на кожне запитання, глибоко потрібна окрема стаття майже під кожне запитання. Під час опрацювання цього розділу рекомендую прочитати додатковий матеріал, зазначений у відповідях.

1. Дайте визначення поняття "колекція".

Колекціями/контейнерами Java прийнято називати класи, основна мета яких - зберігати набір інших елементів.

2. Назвіть переваги використання колекцій.

Масиви мають значні недоліки. Одним із них є кінцевий розмір масиву, як наслідок, необхідність стежити за розміром масиву. Іншим — індексна адресація, що завжди зручно, т.к. обмежує можливості додавання та видалення об'єктів. Щоб позбавитися цих недоліків вже кілька десятиліть програмісти використовують рекурсивні типи даних, такі як списки і дерева. Стандартний набір колекцій Java служить для позбавлення програміста необхідності самостійно реалізовувати ці типи даних і забезпечує його додатковими можливостями.

3. Які дані можуть зберігати колекції?

Колекції можуть зберігати будь-які типи посилань даних.

4. Яка ієрархія колекцій?

Тут слід звернути увагу, що interface Map не входить до ієрархії interface Collection.

З Java 1.6 класи TreeSet та TreeMap імплементують інтерфейси NavigableSet та NavigableMap, які розширюють інтерфейси SortedSet та SortedMap відповідно (SortedSet та SortedMap розширюють Set та Map).

5. Що ви знаєте про колекції типу List?

List - Це впорядкований список. Об'єкти зберігаються у порядку їх додавання до списку. Доступ до елементів списку здійснюється за індексом.

6. Що ви знаєте про колекції типу Set?

Set - безліч неповторних об'єктів. У колекції цього дозволено наявність лише однієї посилання типу null.

7. Що ви знаєте про колекції типу Queue?

Queue - Колекція, призначена для зберігання елементів у порядку, необхідному для їх обробки. На додаток до базових операцій інтерфейсу Collection, черга надає додаткові операції вставки, отримання та контролю.

Черги зазвичай, але не обов'язково, впорядковують елементи у FIFO (first-in-first-out, "першим увійшов - першим вийшов") порядку.

Метод offer() вставляє елемент у чергу, якщо це не вдалося – повертає false. Цей метод відрізняється від методу add() інтерфейсу Collection тим, що метод add() може невдало додати елемент тільки за допомогою unchecked винятки.

Методи remove() і poll() видаляють верхівку черги та повертають її. Який елемент буде видалено (перший чи останній) залежить від реалізації черги. Методи remove() і poll() відрізняються лише поведінкою, коли черга порожня: метод remove() генерує виняток, а метод poll() повертає null.

Методи element() і peek() повертають (але не видаляють) верхівку черги.

**java.util.Queue** реалізує FIFO-буфер. Дозволяє додавати та отримувати об'єкти.При цьому об'єкти можуть бути отримані в порядку, в якому вони були додані.

**Реалізації: java.util.ArrayDeque , java.util.LinkedList .**

**java.util.Deque** успадковує java.util.Queue. Двоспрямована черга. Дозволяє додавати та видаляти об'єкти з двох кінців. Так само може бути використаний як стек.

**Реалізації: java.util.ArrayDeque , java.util.LinkedList .**

8. Що ви знаєте про колекції типу Map, у чому їхня принципова відмінність?

Інтерфейс java.util.Map використовується для відображення кожного елемента з однієї множини об'єктів (ключів) на інше (значень). При цьому, кожному елементу з множини ключів ставиться у відповідність безліч значень. У той же час одному елементу з множини значень може відповідати 1, 2 і більше елементів з множини ключів. Інтерфейс java.util.Map визначає функціональність асоціативних масивів.

Реалізації: java.util.HashMap, java.util.LinkedHashMap, java.util.TreeMap, java.util.WeakHashMap.

java.util.SortedMap успадковує java.util.Map. Реалізації цього інтерфейсу забезпечують зберігання елементів множини ключів у порядку зростання (див. java.util.SortedSet). Реалізації: java.util.TreeMap.

9. Назвіть основні реалізації List, Set, Map.

10. Які реалізації SortedSet ви знаєте і в чому їхня особливість?

java.util.SortedSet успадковує java.util.Set. Реалізації цього інтерфейсу, крім того що стежать за унікальністю об'єктів, що зберігаються, підтримують їх у порядку зростання. Відношення порядку між об'єктами може бути визначене як за допомогою методу compareTo інтерфейсу java.lang.Comparable , так і за допомогою спеціального класу-компаратора, що успадковує інтерфейс java.util.Comparator .

Реалізації: java.util.TreeSet - колекція, яка зберігає свої елементи у вигляді впорядкованого за значенням дерева.TreeSet інкапсулює в собі TreeMap, який, у свою чергу, використовує збалансоване бінарне червоно-чорне дерево для зберігання елементів. TreeSet хороший тим, що для операцій add, remove і contains потрібно гарантований час log(n).

11. У чому відмінності/подібності List та Set?

Обидва успадковані від Collection, а отже мають однаковий набір та сигнатури методів. List зберігає об'єкти у порядку вставки, елемент можна отримати за індексом. Set не може зберігати однакові елементи.

12. Що різного/загального у класів ArrayList та LinkedList, коли краще використовувати ArrayList, а коли LinkedList?

ArrayList реалізований усередині у вигляді звичайного масиву. Тому при вставці елемента в середину, доводиться спочатку зрушувати на один всі елементи після нього, а вже потім в місце, що звільнилося, вставляти новий елемент. Зате в ньому швидко реалізовано взяття та зміну елемента – операції get, set, тому що в них ми просто звертаємось до відповідного елемента масиву.

LinkedList реалізований всередині по-іншому. Він реалізований як зв'язкового списку: набору окремих елементів, кожен із яких зберігає посилання наступний і попередній елементи. Щоб вставити елемент у середину такого списку, достатньо змінити посилання майбутніх сусідів. А ось щоб отримати елемент з номером 130, потрібно пройти послідовно по всіх об'єктах від 0 до 130. Тобто операції set і get тут реалізовані дуже повільно. Подивися на таблицю:

Якщо необхідно вставляти (або видаляти) в середину колекції багато елементів, краще використовувати LinkedList. У решті випадків – ArrayList.

LinkedList вимагає більше пам'яті для зберігання такої ж кількості елементів, тому що крім самого елемента зберігаються ще покажчики на наступний та попередній елементи списку, тоді як ArrayList елементи просто йдуть по порядку

13.У яких випадках розумно використовувати масив, а чи не ArrayList?

Якщо коротко, то Oracle пише – використовуйте ArrayList замість масивів. Якщо відповісти на це питання потрібно по-іншому, то можна сказати наступне: масиви можуть бути швидше та їсти менше пам'яті. Списки втрачають у продуктивності через можливість автоматичного збільшення розміру та супутніх перевірок. Плюс до того, що розмір списку збільшується не на 1, а на більшу кількість елементів (+15) *. Також доступ до [10] у масиві може бути швидше ніж виклик get(10) у списку.

  • Читач надіслав коментар «У ArrayList збільшення відбувається у 1.5 рази. int newCapacity = oldCapacity + (oldCapacity » 1);».

14. Чим відрізняється ArrayList від Vector?

Вектор знижений. У Vector деякі методи синхронізовані і тому вони повільні. У жодному разі Vector не рекомендується використовувати взагалі.

15. Що ви знаєте про реалізацію класів HashSet та TreeSet?

Назва Hash ... походить від поняття хеш-функція. Хеш-функція - це функція, що звужує безліч значень об'єкта до деякого підмножини цілих чисел. Клас Object має метод hashCode(), який використовується класом HashSet для ефективного розміщення об'єктів, що заносяться до колекції. У класах об'єктів, що заносяться в HashSet, цей метод має бути перевизначений (override).

HashSet реалізований на основі хеш-таблиці, а TreeSet – на основі бінарного дерева.

HashSet набагато швидше, ніж TreeSet (константний час проти логарифмічного для більшості операцій, таких як add, remove, contains), але TreeSet гарантує впорядкованість об'єктів. Обидва синхронізовані.

HashSet

  • надає константний час для add(), remove(), contains() та size()
  • порядок елементів у контейнері може змінюватися
  • продуктивність ітерації по контейнеру залежить від ємності та «коефіцієнта завантаження» (рекомендується залишати load factor значенням за умовчанням рівним 0.75, що є добрим компромісом між часом доступу та обсягом даних, що зберігаються)

TreeSet

  • час для базових операцій add(), remove(), contains() - log(n)
  • гарантує порядок елементів
  • не надає жодних параметрів для налаштування продуктивності
  • надає додаткові методи для впорядкованого списку first(), last(), headSet(), tailSet() і т.д.

16. Чим відрізняються HashMap та TreeMap? Як вони влаштовані та працюють? Що з часом доступ до об'єктів, які залежності?

Загалом відповідь про HashSet та TreeSet підходить і до цього питання.

HashMap працює строго швидше за TreeMap.

TreeMap реалізований на червоно-чорному дереві, час додавання/пошуку/видалення елемента — O(log N), де N — кількість елементів TreeMap на даний момент.

У HashMap час доступу до окремого елемента - O(1) за умови, що хеш-функція (Object.hashCode()) визначена нормально (що є правдою у випадку Integer).

Загальна рекомендація - якщо не потрібна впорядкованість, використовувати HashMap. Виняток - ситуація з речовими числами, які як ключі майже завжди дуже погані. Їх потрібно використовувати TreeMap, попередньо поставивши йому компаратор, який порівнює речові числа оскільки це потрібно у цій задачі. Наприклад, для звичайних геометричних завдань два речові числа можуть вважатися рівними, якщо відрізняються не більше, ніж на 1e-9.

17. Що таке Hashtable, чим вона відрізняється від HashMap? На сьогоднішній день вона deprecated, як все-таки використовувати потрібну функціональність?

Деякі методи HashTable синхронізовані, тому вона повільніша за HashMap.

HashTable синхронізована, а HashMap ні.HashTable не дозволяє мати null ключі або значення. HashMap дозволяє мати один null ключ і скільки завгодно null значень. HashMap має підклас LinkedHashMap, який додає можливості по ітерації. Якщо вам потрібна ця функціональність, можна легко перемикатися між класами. Загальне зауваження — не рекомендується використовувати HashTable навіть у багатопотокових програмах. Для цього є ConcurrentHashMap.

18. Що буде, якщо в Map покласти два значення з однаковим ключем?

Останнє значення перезапише попереднє.

19. Як визначається порядок прямування об'єктів у колекції, як відсортувати колекцію?

Клас ТгееМар повністю реалізує інтерфейс SortedMap. Він реалізований як бінарне дерево пошуку, отже, його елементи зберігаються в упорядкованому вигляді. Це прискорює пошук потрібного елемента. Порядок визначається або природним дотриманням елементів, або об'єктом, що реалізує інтерфейс порівняння Comparator.

У цьому класі чотири конструктори:

ТгееМар() - створює порожній об'єкт з природним порядком елементів; TreeМар(Comparator з) - створює порожній об'єкт, в якому порядок задається об'єктом порівняння з; ТгееМар (Map f) - Створює об'єкт, що містить всі елементи відображення f, з природним порядком його елементів; ТгееМар (SortedMap sf) - Створює об'єкт, що містить всі елементи відображення sf, в тому ж порядку.

Інтерфейс Comparator описує два методи порівняння:

int compare(Object obj1, object obj2) — повертає від'ємне число, якщо obj1 у якомусь сенсі менше за obj2; нуль, якщо вони вважаються рівними; позитивне число, якщо obj1 більший за obj2. Для читачів, знайомих з теорією множин, скажімо, що цей метод порівняння має властивості тотожності, антисиметричності та транзитивності;

boolean equals(Object obj) — порівнює даний об'єкт з об'єктом obj, повертаючи true, якщо об'єкти збігаються у сенсі, заданому цим методом.

Для кожної колекції можна реалізувати ці два методи, задавши конкретний спосіб порівняння елементів, та визначити об'єкт класу SortedMap другим конструктором. Елементи колекції будуть автоматично відсортовані у заданому порядку.

public
static
void
main(String[]
args)

Comparator
comparator
=
new
ComparatorString>()

@Override
public
int
compare(String
obj1,
String
obj2)

if
(obj1
==
null)

return
-1;
>
if
(obj2
==
null)

return
1;
>
if
(obj1.equals(obj2))

return
0;
>
return
obj1.compareTo(obj2);
>
>;
TreeMapString,
String>
treeMap1
=
new
TreeMap<>(comparator);
//or
TreeMapInteger,
String>
treeMap
=
new
TreeMap<>(new
ComparatorInteger>()

@Override
public
int
compare(Integer
o1,
Integer
o2)

return
Integer.compare(o1,o2);
>
>);
>

20. Дайте визначення поняття “ітератор”.

Ітератор – об'єкт, що дозволяє перебирати елементи колекції. Наприклад длячого реалізовано з використанням ітератора. Одним із ключових методів інтерфейсу Collection є метод Iterator iterator(). Він повертає ітератор - тобто об'єкт, що реалізує інтерфейс Iterator.

Інтерфейс Iterator має таке визначення:

public
interface
Iterator
E>
E
next();
boolean
hasNext();
void
remove();
>

21. Яку функціональність представляє клас Collections

Деякі з методів

22. Як отримати колекцію, що не модифікується?

Колекцію, доступну тільки для читання, можна отримати за допомогою методів:

public
static
T>
SortedSetT>
unmodifiableSortedSet(SortedSetT>
s)

return
new
UnmodifiableSortedSet<>(s);
>
public
static
T>
ListT>
unmodifiableList(List
extends
T>
list)

return
(list
instanceof
RandomAccess
?
new
UnmodifiableRandomAccessList<>(list)
:
new
UnmodifiableList<>(list));
>
і
т.д.
для
кожного
типу
(Map,
SortedMap
і
т.п.)

23.Які колекції синхронізовані?

Для цього використовується пакет Concurrent. А так @Deprecated HashTable, Vector.

24. Як отримати синхронізовану колекцію із несинхронізованої?

Використовуйте такі методи:

Collections.synchronizedList(list); Collections.synchronizedSet(set); Collections.synchronizedMap(map); Всі вони приймають колекцію як параметр і повертають потокобезпечну колекцію з тими ж елементами всередині.

public
static
T>
SetT>
synchronizedSet(SetT>
s)

return
new
SynchronizedSet<>(s);
>
і
т.д.
для
кожного
типу
колекції

25. Як отримати колекцію лише для читання?

Використовуйте такі методи:

Collections.unmodifiableList(list); Collections.unmodifiableSet(set); Collections.unmodifiableMap(map); Всі вони приймають колекцію як параметр і повертають колекцію тільки для читання з тими ж елементами всередині.

26. Чому Map не успадковується від Collection?

Не сумісні, т.к. створені для різних структур даних. Map використовує пару ключ-значення.

27. У чому різниця між Iterator та Enumeration?

Enumeration вдвічі швидше за Iterator і використовує менше пам'яті. Iterator є потокобезпечним, т.к. не дозволяє іншим потокам модифікувати колекцію під час перебору. Enumeration можна використовувати тільки для read-only колекцій. Також у нього відсутня метод remove();

Enumeration: hasMoreElement(), nextElement() Iterator: hasNext(), next(), remove()

28. Як реалізований цикл foreach?

Реалізовано на основі Iterator.

for(тип
ітер_пер
:
колекція)
блок_операторів

29. Чому немає методу iterator.add(), щоб додати елементи до колекції?

Єдине завдання ітератора – це перебір колекції. Кожна колекція має метод add(), яким ви можете скористатися.Немає сенсу додавати цей метод до ітератора, тому що колекції можуть бути впорядкованими та невпорядкованими, і метод add() при цьому має бути влаштований по-різному.

30. Чому в класі iterator немає методу отримання наступного елемента без пересування курсора?

Ітератор схожий на покажчик своїми основними операціями: він вказує на окремий елемент колекції об'єктів (надає доступ до елемента) і містить функції переходу до іншого елемента списку (наступного або попереднього). Контейнер, який реалізує підтримку ітераторів, повинен надавати перший елемент списку, а також можливість перевірити, чи всі елементи контейнера перебрані (чи є ітератор кінцевим). Таким чином, без курсору просто не можна буде реалізувати безпомилкове пересування по колекції.

31. У чому різниця між Iterator та ListIterator?

  1. Iterator можна використовувати для перебору елементів Set, List і Map. На відміну від нього, ListIterator може бути використаний лише для перебору елементів колекції List
  2. Iterator дозволяє перебирати елементи лише одному напрямку, з допомогою методу next(). Тоді як ListIterator дозволяє перебирати список в обох напрямках, за допомогою методів next() та previous()
  3. За допомогою ListIterator можна модифікувати список, додаючи/видаляючи елементи за допомогою методів add() і remove(). Iterator не підтримує цього функціоналу

32. Які є методи перебору всіх елементів List?

  • Цикл із ітератором
  • Цикл for
  • Розширений цикл for
  • Цикл while

33. У чому різниця між fail-safe та fail-fast властивостями?

На противагу fail-fast, ітератори fail-safe не викликають жодних винятків при зміні структури, тому що вони працюють із клоном колекції замість оригіналу.Ітератор колекції CopyOnWriteArrayList та ітератор представлення keySet колекції ConcurrentHashMap є прикладами ітераторів fail-safe.

34. Що робити, щоб не виникло виключення ConcurrentModificationException?

Насамперед, можна підібрати інший ітератор, який працює за принципом fail-safe. Наприклад, якщо ви використовуєте List, можете взяти ListIterator. Якщо вам потрібна застаріла колекція — то використовуйте перелічувачі. Якщо вищевикладене вам не підходить, у вас є три варіанти: При використанні JDK 1.5 або вище, вам підійдуть класи ConcurrentHashMap і CopyOnWriteArrayList. Це найкращий варіант Ви можете перетворити список на масив і перебирати масив Ви можете блокувати зміни списку на час перебору за допомогою блоку synchronized Зверніть увагу, що останні два варіанти негативно позначаться на продуктивності.

35. Що таке стек і черга, розкажіть у чому їх відмінності?

Колекції, створені для того, щоб зберігати елементи для подальшої обробки. Крім базових операцій інтерфейсу Collection, черги підтримують додаткові операції додавання, видалення та перевірки стану елемента. Зазвичай, але не обов'язково черги працюють за принципом FIFO – першим прийшов, першим пішов. Стек майже як черга, але працює за принципом LIFO останнім прийшов, першим пішов. Незалежно від порядку додавання/видалення, голова черги – це елемент, який буде видалений під час виклику методів remove() або poll(). Також зверніть увагу на те, що Stack та Vector обидва потокобезпечні.

Використання: використовуйте чергу якщо ви хочете обробляти потік елементів у тому ж порядку, в якому вони надходять. Добре для списку завдань та обробки запитів.Використовуйте стек якщо ви хочете класти та видаляти елементи тільки з вершини стеку, що корисно у рекурсивних алгоритмах.

36. У чому різниця між інтерфейсами Comparable та Comparator?

У Java всі колекції, що підтримують автоматичне сортування, використовують методи порівняння для того, щоб правильно розсортувати елементи. Як приклад таких класів ми можемо вказати TreeSet, TreeMap і т.д. Щоб розсортувати елементи, клас повинен реалізувати інтерфейси Comparator чи Comparable. Саме тому класи-обгортки як Integer, Double та String реалізують інтерфейс Comparable. Інтерфейс Comparable допомагає зберігати природне сортування, тоді як Comparator дозволяє сортувати елементи за різними спеціальними шаблонами. Примірник компаратора зазвичай передається конструктору колекції, якщо це підтримує. Слід зазначити, що інтерфейс Comparable може бути реалізований саме елементами колекції або ключами Map, а Comparator реалізується окремим об'єктом (це зручно, тому що можна заготовити кілька реалізацій для різних правил сортувань, не змінюючи код елементів колекції/ключів Map).

37. Чому колекції не успадковують інтерфейси Cloneable та Serializable?

Ну, найпростіша відповідь — «бо не треба». Функціонал, що надається інтерфейсами Cloneable і Serializable, просто не потрібен для колекцій. (Тут варто зробити виняток для ArrayList та LinkedList, які їх реалізують).

Ще одна причина — далеко не завжди потрібний підклас Cloneable, тому що кожна операція клонування споживає дуже багато пам'яті, і недосвідчені програмісти можуть витрачати її самі, не розуміючи наслідків.

І остання причина — клонування та серіалізація є дуже вузькоспецифічними операціями, і реалізовувати їх потрібно лише коли це потрібно.Багато класів колекції реалізують дані інтерфейси, але зовсім не потрібно закладати їх для всіх колекцій взагалі. Якщо вам потрібне клонування та серіалізація - просто скористайтеся тими класами, де вона є, якщо ні - іншими класами.

40 Java Колекції Інтерв'ю Питання та відповіді

Java Collections Framework є основним аспектом мови програмування Java. Це одна з важливих тем для інтерв'ю Java. Тут я перераховую деякі важливі питання та відповіді для структури колекцій Java.

  1. Що таке Java Collections Framework?Перелічіть деякі переваги фреймворку Collections?
  2. У чому перевага Generics in Collections Framework?
  3. Які основні інтерфейси Java Collections Framework?
  4. Чому Collection не розширює інтерфейси Cloneable та Serializable?
  5. Чому інтерфейс Map не розширює Collection?
  6. Що таке ітератор?
  7. У чому різниця між інтерфейсом Enumeration та Iterator?
  8. Чому немає методу, подібного до Iterator.add(), для додавання елементів до колекції?
  9. Чому у Iterator немає методу для отримання наступного елемента без переміщення курсора?
  10. Що відрізняється від Iterator і ListIterator?
  11. Якими є різні способи перебору списку?
  12. Що розумієте під властивістю ітератора fail-fast?
  13. У чому різниця між відмовостійким і відмовостійким?
  14. Як уникнути ConcurrentModificationException при повторенні колекції?
  15. Чому немає конкретних реалізацій інтерфейсу Iterator?
  16. Що таке UnsupportedOperationException?
  17. Як працює HashMap у Java?
  18. Яке значення мають методи hashCode() та equals()?
  19. Чи можемо ми використовувати будь-який клас як ключ карти?
  20. Які різні види колекцій надаються інтерфейсом картки?
  21. У чому різниця між HashMap та Hashtable?
  22. Як вибрати між HashMap та TreeMap?
  23. Які подібності та відмінності між ArrayList та Vector?
  24. У чому різниця між Array і ArrayList?Коли ви будете використовувати Array over ArrayList?
  25. У чому різниця між ArrayList та LinkedList?
  26. Які класи колекції забезпечують довільний доступ до його елементів?
  27. Що таке EnumSet?
  28. Які класи колекції є потоково-орієнтованими?
  29. Що таке паралельні класи колекції?
  30. Що таке BlockingQueue?
  31. Що таке Черга та Стек, перерахуйте їх відмінності?
  32. Що таке клас колекцій?
  33. Що таке інтерфейс Comparable та Comparator?
  34. У чому різниця між інтерфейсом Comparable та Comparator?
  35. Як ми можемо відсортувати список об'єктів?
  36. Передаючи колекцію як аргумент функції, як ми можемо бути впевнені, що функція зможе змінити її?
  37. Як ми можемо створити синхронізовану колекцію з цієї колекції?
  38. Які загальні алгоритми реалізовані у Collections Framework?
  39. Що таке позначення Big-O? Наведіть кілька прикладів?
  40. Які найкращі практики, пов'язані з Java Collections Framework?

Java Колекції Інтерв'ю Питання Відповіді

Що таке Java Collections Framework? Перерахуйте деякі переваги фреймворку Collections?

  • Скорочення зусиль із розробки завдяки використанню базових класів колекцій, а не реалізації наших власних класів колекцій.
  • Якість коду покращується за рахунок використання добре протестованих базових класів колекцій.
  • Скорочення зусиль для обслуговування коду завдяки використанню класів колекцій, що постачаються з JDK.
  • Можливість повторного використання та сумісність

У чому перевага Generics in Collections Framework?

Які основні інтерфейси Java Collections Framework?

Чому Collection не розширює інтерфейси Cloneable та Serializable?

Чому інтерфейс Map не розширює Collection?

Що таке ітератор?

У чому різниця між інтерфейсом Enumeration та Iterator?

Чому немає методу, подібного до Iterator.add(), для додавання елементів до колекції?

Чому у Iterator немає методу для отримання наступного елемента без переміщення курсора?

Що відрізняється від Iterator і ListIterator?

  • Ми можемо використовувати Iterator для обходу колекцій Set та List, тоді як ListIterator можна використовувати лише зі списками.
  • Ітератор може переміщатися тільки у прямому напрямку, тоді як ListIterator може використовуватися для переміщення в обох напрямках.
  • ListIterator успадковується від інтерфейсу Iterator і поставляється з додатковими функціями, такими як додавання елемента, заміна елемента, отримання позиції індексу попереднього та наступного елементів.

Якими є різні способи перебору списку?

Ми можемо перебирати список двома різними способами – використовуючи ітератор та використовуючи цикл for-each.

Що розумієте під властивістю ітератора fail-fast?

У чому різниця між відмовостійким і відмовостійким?

Як уникнути ConcurrentModificationException при повторенні колекції?

Чому немає конкретних реалізацій інтерфейсу Iterator?

Що таке UnsupportedOperationException?

Як працює HashMap у Java?

Яке значення мають методи hashCode() та equals()?

  • Якщо o1.equals(o2) , то o1.hashCode() == o2.hashCode() завжди має бути true .
  • Якщо o1.hashCode() == o2.hashCode має значення true, це означає, що o1.equals(o2) матиме значення true .

  • Якщо клас перевизначає метод equals(), він також повинен перевизначити метод hashCode().
  • Клас повинен дотримуватися правил, пов'язаних з equals() та hashCode() для всіх екземплярів. Будь ласка, зверніться до цього питання для цих правил.
  • Якщо поле класу не використовується в equals(), ви не повинні використовувати його у методі hashCode().
  • Найкраща практика для ключового класу, що визначається користувачем, — зробити його незмінним, щоб значення hashCode () могло бути кешовано для швидкої продуктивності. Також незмінні класи гарантують, що hashCode() та equals() не зміняться в майбутньому, що вирішить будь-яку проблему із мінливістю.
    Наприклад, припустимо, у мене є клас MyKey, який я використовую для ключа HashMap.

Схожі статті

  • У чому полягає взаємозв'язок наукового та повсякденного пізнання
  • У чому полягає поняття
  • У чому полягає головна мета використання алгоритмів
  • У чому полягає механізм дії Стимола
  • У чому полягає жіночий гормон естроген
  • У чому полягає суть стратегії
  • У чому полягає шлюбна ніч
  • У чому полягає творчість Чехова
  • Недавні статті

  • Як бродить зернова брага
  • Що робити якщо не засмагаєш на сонці чому засмага погано лягає на шкіру або перестає прилипати
  • Як швидко зняти гель лак без апарату
  • Як робиться Каті голови
  • Яка гребінець краще для об'єму
  • Чим роблять м'яку покрівлю
  • Чи можна залишати крем для обличчя на ніч
  • Де знаходиться датчик селектора
  • географія нашої діяльності
    вулиця Драгоманова, 27
    вул. Курчатова 1Б
    вул. Міцкевича 130
    вул. Лабунського, 1
    вул. Макарова-Пржевальського
    вул. Толстого 10
    вул. Грушевського 28
    вул. Перший промінь (Черняхівського)
    напишіть нам

    сообщение успешно отправлено
    x