30 top java collections interview questions with answers
Цей підручник містить перелік найбільш часто задаваних запитань щодо інтерв’ю, що стосуються колекцій Java, а також відповіді та приклади для вас. :
Основним API Java є Java Collections Framework. Він підтримує основну концепцію цієї мови програмування. Якщо ви хочете стати розробником Java, ви повинні добре знати ці основні концепції.
Сфера колекцій Java надзвичайно широка, і в інтерв’ю можна задати багато питань. Тут ми зібрали перелік якомога більшої кількості відповідних запитань, які вам можуть задати під час співбесіди.
=> Познайомтесь тут, щоб побачити A-Z підручників із навчання Java тут
Що ви дізнаєтесь:
Запитання щодо інтерв’ю у колекціях Java
Q # 1) Поясніть фреймворк Java Collections.
Відповідь: Фреймворк Java Collections - це архітектура, яка допомагає керувати групою об’єктів та зберігати їх. За його допомогою розробники можуть отримувати доступ до розфасованих структур даних та маніпулювати даними за допомогою алгоритмів.
Колекція Java включає інтерфейс та класи, які підтримують такі операції, як пошук, видалення, вставка, сортування тощо. Поряд з інтерфейсом та класами, колекції Java включають також алгоритми, які допомагають у маніпуляціях.
Q # 2) Які переваги колекцій Java?
Відповідь:
Переваги колекцій Java:
- Замість того, щоб реалізовувати наші класи колекцій, він використовує основні класи колекції, тим самим зменшуючи зусилля, необхідні для його розвитку.
- Тут використовуються добре перевірені класи фреймворків. Отже, покращується якість його коду.
- Це зменшує зусилля з обслуговування коду.
- Java Collection Framework є сумісним і багаторазовим.
Q # 3) Що ви знаєте про ієрархію колекцій на Java?
Відповідь:
(зображення джерело )
Q # 4) Розкажіть про основні інтерфейси Java Collection.
Відповідь:
Нижче наведено основні інтерфейси Java Collection Framework.
Колекція: Вона є основою ієрархії Колекції та представляє її елементи. Однак Java не забезпечує прямого застосування Collection. Крім того, більшість колекцій Java походять з цього інтерфейсу.
Набір: Він не може вміщувати повторювані елементи, оскільки моделює абстракцію математичної множини. Як випливає з назви, він представляє набори, наприклад, колода карт.
Список: Він може містити повторювані елементи і є упорядкованою колекцією. Ви можете використовувати його індекс для доступу до будь-якого елемента в ньому. Список схожий на домовленість, масив, з динамічною довжиною.
Це кілька інтерфейсів Java Collection. Однак є ще кілька інтерфейсів, як показано нижче.
- Черга
- Зняти чергу
- Ітератор
- Можна їсти
- SortedSet
- ListIterator.
Q # 5) Чому колекція не поширює інтерфейси, що піддаються серіалізації та клонуванню Інтерфейс?
Відповідь: Завданням інтерфейсу колекції є вказати групу об’єктів, які називаються елементами. Впровадження Колекцій вирішує, яким чином елементи будуть підтримуватися. Наприклад, реалізації списку дозволяють повторювані елементи, але реалізації набору - ні.
Багато реалізацій мають метод публічного клонування. Але непрактично включати його у всі реалізації Колекції, оскільки Колекція є абстрактною, а реалізація - це все, що має значення.
Значення та наслідки як серіалізації, так і клонування мають сенс під час роботи з основними реалізаціями. Отже, реальна реалізація вирішує, чи можна її серіалізувати чи клонувати та як.
Докладніше = >> Інтерфейс маркера в Java: серіалізується та клонується
Ось чому індукція серіалізації та клонування у кожному впровадженні не дуже гнучка та обмежує.
Q # 6) Що ви розумієте під Iterator у Java Collection Framework?
Відповідь: У простих масивах ми можемо використовувати цикли для доступу до кожного елемента. Коли подібний підхід необхідний для доступу до елементів у колекції, ми використовуємо ітератори. Ітератор - це конструкція, що використовується для доступу до елементів об'єктів Collection.
У Java ітератори - це об’єкти, що реалізують інтерфейс “Ітератор” Collection Framework. Цей інтерфейс є частиною пакету java.util.
Деякі характеристики ітераторів:
- Ітератори використовуються для обходу об’єктів Collection.
- Ітератори відомі як “Універсальний курсор Java”, оскільки ми можемо використовувати один і той же Ітератор для всіх колекцій.
- Ітератори забезпечують операції 'Читання' та 'Видалення', крім обходу колекцій.
- Оскільки вони універсальні і працюють з усіма колекціями, ітератори легше реалізовувати.
Перелічіть запитання щодо колекції Java
Q # 7) Чи знаєте ви про використання інтерфейсу List?
(зображення джерело )
Відповідь: Мета інтерфейсу списку - підтримувати порядок вставки. Це також дозволяє зберігати повторювані значення.
Це допомагає в плавній обробці елементів залежно від його індексу за допомогою різних методів, які він містить. ArrayList, Vector, Stack та LinkedList - це різні класи, що реалізують інтерфейс List.
Q # 8) Що ви розумієте про ArrayList у Java?
Відповідь: Реалізацією інтерфейсу List є ArrayList. Він динамічно додає або вилучає елементи зі списку, а також забезпечує вставку елементів разом із позиційним доступом. ArrayList дозволяє повторювані значення, і його розмір може динамічно збільшуватися, якщо кількість елементів перевищує початковий розмір.
Q # 9) Як ви перетворите масив рядків у ArrayList?
Відповідь: Це запитання програмування на рівні початківця, яке інтерв’юер просить перевірити ваше розуміння колекції utility.classes. Збір та масиви - це два корисні класи Структури збору, якими часто цікавляться інтерв’юери.
Колекції пропонують певні статичні функції для виконання конкретних завдань на типах колекцій. Хоча Array має утилітні функції, які він виконує для типів масивів.
//String array String() num_words = {'one', 'two', 'three', 'four', 'five'}; //Use java.util.Arrays class to convert to list List wordList = Arrays.asList(num_words);
Зауважте, що окрім типу String, ви також можете використовувати масиви іншого типу для перетворення в ArrayList.
Наприклад,
//Integer array Integer() numArray = {10,20,30,40}; //Convert to list using Arrays class asList method List num_List = Arrays.asList(numArray);
Q # 10) Перетворити Array на ArrayList та ArrayList на Array.
Відповідь: Для перетворення ArrayList в Array використовується метод toArray () - List_object.toArray (новий рядок (List_object.size ()))
Поки метод asList () використовується для перетворення масиву в ArrayList- Arrays.asList (елемент). AsList () - це статичний метод, де параметрами є об'єкти списку.
Q # 11) Що таке LinkedList і скільки його типів підтримується в Java?
(зображення джерело )
Відповідь: LinkedList - це структура даних із послідовністю посилань, де кожне посилання пов’язане з наступним посиланням.
Два типи LinkedList використовуються в Java для зберігання елементів:
- Поодиноко пов’язаний список: Тут кожен вузол зберігає дані вузла разом із посиланням або вказівником на наступний вузол.
- Подвійно пов'язаний список: Подвійний LinkedList поставляється з подвійними посиланнями, одне посилання на наступний вузол, а інше - на попередній вузол.
Q # 12) Що ви розумієте під BlockingQueue?
Відповідь: У простій черзі ми знаємо, що всякий раз, коли черга заповнена, ми не можемо вставити більше елементів. У цьому випадку черга просто надає повідомлення про те, що черга заповнена і виходить. Подібний випадок трапляється, коли черга порожня і в черзі немає елемента, який потрібно видалити.
Замість того, щоб просто вийти, коли вставка / видалення не може бути здійснено, як щодо того, щоб ми почекали, поки ми зможемо вставити або видалити елемент?
На це відповідає зміна черги, що викликається “Блокування черги” . У блокувальній черзі блокування активується під час виконання операцій по черзі та вилученні з черги, коли черга намагається поставити в чергу повну чергу або вивести порожню чергу.
Блокування показано на наступному малюнку.
BlockingQueue
Таким чином, під час роботи в черзі блокуюча черга буде чекати, поки не стане доступним простір, щоб елемент можна було успішно вставити. Подібним чином, в операції вилучення черги блокування чекатиме, поки елемент стане доступним для операції.
як знайти ключ безпеки маршрутизатора -
Блокувальна черга реалізує інтерфейс „BlockingQueue”, який належить до пакету „java.util.concurrent”. Слід пам’ятати, що інтерфейс BlockingQueue не допускає значення null. Якщо він стикається з null, тоді він видає NullPointerException.
Q # 13) Що таке пріоритетна черга в Java?
Відповідь: Черга пріоритетів у Java схожа на структури даних стека або черги. Це абстрактний тип даних на Java і реалізований як клас PriorityQueue в пакеті java.util. У черзі пріоритетів є особливість, що кожен елемент у черзі пріоритету має пріоритет.
У черзі пріоритетів елемент з вищим пріоритетом є сервером перед елементом з нижчим пріоритетом.
Усі елементи в черзі пріоритетів упорядковані відповідно до природного замовлення. Ми також можемо впорядкувати елементи відповідно до власного порядку, надавши компаратор під час створення об’єкта черги пріоритетів.
Встановіть запитання щодо інтерв’ю
Q # 14) Яка користь від Set Interface? Розкажіть про класи, на яких це реалізовано Інтерфейс.
Відповідь: Інтерфейс множин використовується в теорії множин для формування математичної множини. Він схожий на інтерфейс List, але все ж трохи відрізняється від нього. Інтерфейс набору - це не впорядкована колекція, отже, не зберігається порядок, коли ви видаляєте або додаєте елементи.
Головним чином, він не підтримує повторювані елементи, отже кожен елемент у Set Interface є унікальним.
Це також дозволяє змістовне порівняння екземплярів Set, навіть коли є різні реалізації. Крім того, він укладає більш суттєвий контракт на дії операцій equals і hashCode. Якщо два приклади мають однакові елементи, то вони рівні.
З усіх цих причин Set Interface не має операцій на основі індексу елементів, таких як List. Він використовує лише успадковані методи інтерфейсу колекції. TreeSet, EnumSet, LinkedHashSet та HashSet реалізує Set Interface.
Q # 15) Я хочу додати нульовий елемент до HashSet та TreeSet. Можу я?
Відповідь: Ви не можете додати будь-який нульовий елемент у TreeSet, оскільки він використовує NavigableMap для зберігання елементів. Але ви можете додати лише один до HashSet. SortedMap не дозволяє використовувати нульові клавіші, а NavigableMap є його підмножиною.
Ось чому ви не можете додати в TreeSet нульовий елемент, він буде придумувати NullPointerException кожного разу, коли ви намагаєтесь це зробити.
Q # 16) Що ви знаєте про LinkedHashSet?
Відповідь: LinkedHashSet - це підклас HashSet, і він забезпечує встановлення інтерфейсу. Як упорядкована форма HashSet, він управляє подвійно пов’язаним списком у всіх елементах, які він містить. Він зберігає порядок вставки, як і його батьківський клас, він містить лише унікальні елементи.
Q # 17) Поговоріть про те, як HashSet зберігає елементи.
Відповідь: HashMap зберігає пари ключ-значення, але ключі повинні бути унікальними. Ця функція Map використовується HashSet, щоб переконатися, що кожен елемент унікальний.
Декларація карти у HashSet відображається, як показано нижче:
private transient HashMapmap; //This is added as value for each key private static final Object PRESENT = new Object();
Збережені елементи в HashSet зберігаються як ключ на Карті, а об’єкт представляється як значення.
Q # 18) Поясніть метод EmptySet ().
Відповідь: Метод Emptyset () видаляє нульові елементи і повертає порожній незмінний набір. Цей незмінний набір можна серіалізувати. Оголошення методу Emptyset () є- public static final Set emptySet ().
Запитання щодо інтерв’ю з картою
Q # 19) Розкажіть про інтерфейс карти.
Відповідь: Map Interface призначений для швидшого пошуку, і він зберігає елементи у вигляді пар ключів і значень. Оскільки кожен ключ тут унікальний, він підключається або відображається лише до одного значення. Ці пари ключ-значення називаються записами на карті.
У цьому інтерфейсі є підписи методів для пошуку, вставки та видалення елементів залежно від унікального ключа. Це робить його ідеальним інструментом для відображення асоціацій ключ-значення, як словник.
Q # 20) Карта не розширює інтерфейс збору. Чому?
Відповідь: Інтерфейс збору - це накопичення об'єктів, і ці об'єкти зберігаються структурно з механізмом зазначеного доступу. Поки інтерфейс Map слідує структурі пар ключ-значення. Метод add інтерфейсу колекції не підтримує метод put інтерфейсу Map.
Ось чому Map не розширює інтерфейс колекції, але все ж вона є важливою частиною Java Collection Framework.
Питання # 21) Як HashMap працює в Java?
Відповідь: HashMap - це колекція, заснована на Map, і її елементи складаються з пар ключ-значення. HashMap зазвичай позначається, або. До кожного елемента хеш-карти можна отримати доступ за допомогою його ключа.
HashMap працює за принципом 'хешування'. У техніці хешування довший рядок перетворюється на менший рядок за допомогою «хеш-функції», яка є не що інше, як алгоритм. Менший рядок сприяє швидшому пошуку та ефективному індексуванню.
Q # 22) Поясніть IdentityHashMap, WeakHashMap та ConcurrentHashMap.
Відповідь:
IdentityHashMap дуже схожий на HashMap. Різниця полягає в тому, що при порівнянні елементів IdentityHashMap використовує посилальну рівність. Це не бажана реалізація карти, і хоча вона виконує інтерфейс карти, вона навмисно не виконує загальний контракт карти.
Отже, при порівнянні об’єктів це дозволяє використовувати метод equals. Він призначений для використання в рідкісних випадках, коли потрібна семантика рівнозначності посилань.
WeakHashMap Реалізація зберігає лише слабкі посилання на свої ключі. Це дозволяє збирати сміття пари ключ-значення, коли більше немає посилань на її ключі поза WeakHashMap.
Він в основному використовується з тими ключовими об'єктами, де перевірка ідентичності об'єкта проводиться за допомогою рівних методів за допомогою оператора ==.
ConcurrentHashMap реалізує інтерфейси ConcurrentMap та Serializable. Це оновлена, вдосконалена версія HashMap, оскільки вона погано працює з багатопоточним середовищем. У порівнянні з HashMap він має вищий показник продуктивності.
Q # 23) Яка якість хорошого ключа для HashMap?
Відповідь: Розуміючи, як працює HashMap, легко зрозуміти, що вони залежать головним чином від методів equals та hashCode ключових об'єктів. Отже, хороший ключ повинен надавати один і той же hashCode знову і знову, незалежно від часу його отримання.
Таким же чином, у порівнянні з методом equals, однакові ключі повинні повертати true, а різні ключі повинні повертати false. Ось чому найкращим кандидатом на ключі HashMap називають незмінні класи.
Q # 24) Коли ви можете використовувати TreeMap?
(зображення джерело )
Відповідь: TreeMap, як спеціальна форма HashMap, підтримує впорядкування ключів за замовчуванням 'природне впорядкування', як те, чого немає в HashMap. Ви можете використовувати його для сортування об’єктів за допомогою якогось ключа.
Наприклад, якщо ви хочете реалізувати та надрукувати словник в алфавітному порядку, ви можете використовувати TreeMap разом із TreeSet. Він сортуватиметься автоматично. Звичайно, ви могли б це зробити і вручну, але робота буде виконуватися ефективніше за допомогою TreeMap. Ви також можете використовувати його, якщо довільний доступ для вас життєво важливий.
Різниця між питаннями
Q # 25) У чому різниця між колекцією та колекціями?
Відповідь:
Колекція | Колекції |
---|---|
Ми не можемо використовувати ListIterator для обходу набору. | ListIterator може обертати список у будь-якому напрямку. |
Це інтерфейс. | Це клас. |
Колекція представляє групу об’єктів як єдине ціле. | Колекції визначають різні методи утиліти для об’єктів колекції. |
Це кореневий інтерфейс Collection Framework. | Колекції - це клас корисності. |
Він виводить структури даних Framework Collection. | Колекції містять багато різних статичних методів для допомоги у маніпулюванні структурою даних. |
Q # 26) Чим Array відрізняється від ArrayList?
Відповідь:
Різниця між Array та ArrayList наведена нижче:
Масив | ArrayList |
---|---|
Масив - це сильно набраний клас. | ArrayList - це вільно набраний клас. |
Неможливо динамічно змінити розмір масиву, його розмір статичний. | ArrayList можна динамічно змінювати. |
Масив не потребує боксу та розпакування елементів. | ArrayList потребує боксу та розпакування елементів. |
Q # 27) Диференціюйте ArrayList та LinkedList.
Відповідь:
ArrayList | LinkedList |
---|---|
ArrayList використовує динамічний масив внутрішньо для зберігання елементів. | LinkedList реалізує подвійно пов'язаний список. |
Маніпуляція з елементами ArrayList відбувається досить повільно. | LinkedList набагато швидше маніпулює своїми елементами. |
ArrayList може діяти виключно як Список. | LinkedList може виступати як списком, так і чергою. |
Корисно для зберігання та доступу до даних. | Корисно для маніпулювання даними. |
Q # 28) Чим Iterable відрізняється від Iterator?
Відповідь:
Можна їсти | Ітератор |
---|---|
Це інтерфейс пакета Java.lang. | Це інтерфейс пакета Java.util. |
Дає лише один абстрактний метод, відомий як Ітератор. | Він поставляється з двома абстрактними методами - hasNext і next. |
Представляє ряд елементів, які можна пройти. | Підставки для об’єктів із станом ітерації. |
Q # 29) Сформулюйте відмінності між набором та списком.
Відповідь:
Встановити | Список |
---|---|
Набір приладдя Набір інтерфейсу. | Список реалізує інтерфейс List. |
Набір - це невпорядкований набір елементів. | Список - це впорядкований набір елементів. |
Набір не підтримує порядок елементів під час вставки. | Список зберігає порядок елементів під час вставки. |
Набір не дозволяє повторювані значення. | Список дозволяє дублювати значення. |
Набір не містить жодного застарілого класу. | Список містить вектор, застарілий клас. |
Набір допускає лише одне нульове значення. | Немає обмежень на кількість нульових значень у списку. |
Q # 30) Яка різниця між чергою та стеком?
Відповідь:
Черга | Стек |
---|---|
Черга працює за принципом підходу «Перший-в-першому» (FIFO). | Стек працює за принципом 'останній-перший-вийшов' (LIFO). |
Вставка та видалення в черзі відбуваються з різних кінців. | Вставка та видалення виконуються з того самого кінця, який називається вершиною стека. |
Enqueue - це ім'я Insertion, а dequeue - це видалення елементів. | Push - це вставка, а Pop - це видалення елементів у Stack. |
У ньому є два покажчики - один на перший елемент списку (спереду) і один на останній (ззаду). | Він має лише один покажчик, що вказує на верхній елемент. |
Q # 31) Чим SinglyLinkedList та DoublyLinkedList відрізняються один від одного?
Відповідь:
Єдинозв’язаний список | Список подвійних зв’язків |
---|---|
Кожен вузол списку з єдиним зв’язком складається з даних та вказівника на наступний вузол. | Подвійно зв’язаний список складається з даних, вказівника на наступний вузол та вказівника на попередній вузол. |
Однопов’язаний список можна пройти за допомогою наступного вказівника. | За подвійним зв’язаним списком можна пройти, використовуючи як попередній, так і наступний покажчик. |
Однозв’язаний список займає менше місця в порівнянні зі списком з подвійним зв’язком. | Подвійно пов’язаний список займає багато місця в пам'яті. |
Доступ до елементів не дуже ефективний. | Доступ до елементів ефективний. |
Q # 32) Чим HashMap відрізняється від HashTable?
Відповідь:
HashMap | HashTable |
---|---|
HashMap успадковує клас AbstractMap | HashTable успадковує клас Словник. |
HashMap не синхронізований. | HashTable синхронізовано. |
HashMap допускає кілька нульових значень, але лише один нульовий ключ. | HashTable не допускає нульового значення або ключа. |
HashMap швидше. | HashTable працює повільніше, ніж HashMap. |
HashMap може пройти Ітератор. | HashTable неможливо пройти за допомогою ітератора або перерахувача. |
Q # 33) Перелічіть різницю між ArrayList та Vector.
Відповідь:
ArrayList | Вектор |
---|---|
ArrayList не синхронізований. | Вектор синхронізується. |
ArrayList не є застарілим класом. | Вектор - це застарілий клас. |
ArrayList збільшує розмір наполовину ArrayList, коли елемент вставляється понад його розмір. | Вектор збільшує свій розмір удвічі, коли елемент вставляється за межі його розміру. |
ArrayList не є потокобезпечним | Вектор є потокобезпечним. |
Q # 34) Чим FailFast відрізняється від Failsafe?
Відповідь:
FailFast | Безаварійності |
---|---|
Під час ітерації жодна модифікація колекції не допускається. | Дозволяє модифікувати під час ітерації. |
Використовує оригінальну колекцію для подорожей. | Використовує копію оригінальної колекції. |
Не потрібно додаткової пам'яті. | Потрібна додаткова пам’ять. |
Викидає ConcurrentModificationException. | Не виключено жодного винятку. |
Висновок
Ці запитання щодо співбесіди Java Collections допоможуть вам підготуватися до співбесіди. Ваша підготовка до співбесіди з колекціями Java повинна бути глибокою та обширною, тому вивчіть ці питання та добре зрозумійте концепцію.
Ці запитання перевіряють не лише ваші знання, а й вашу присутність духу.
=> Зверніть увагу на прості навчальні серії Java тут
Рекомендована література
- Підручник JAVA для початківців: 100+ практичних навчальних посібників Java
- Основи Java: Синтаксис Java, клас Java та основні концепції Java
- Запитання та відповіді на інтерв’ю
- Запитання та відповіді на інтерв’ю для тестування ETL
- 30 найпопулярніших запитань та відповідей на інтерв’ю в HTML (СПИСОК 2021)
- 30 найкращих запитань та відповідей на інтерв’ю з огірками
- 40 найкращих запитань та відповідей на інтерв’ю Java 8 (найважливіші)
- 30 найкращих запитань та відповідей на інтерв’ю SAS