30 top java collections interview questions with answers
Този урок включва списък с най-често задаваните въпроси за интервюта за колекции Java, заедно с отговори и примери за вас :
Основният API на Java е Java Collections Framework. Той поддържа основната концепция на този език за програмиране. Ако искате да станете разработчик на Java, трябва добре да знаете тези основни концепции.
Областта на колекциите на Java е изключително широка и много въпроси могат да бъдат зададени в интервю. Тук събрахме списък с възможно най-много въпроси, които може да ви бъдат зададени в интервюто.
=> Проверете тук, за да видите A-Z на уроците за обучение по Java тук
Какво ще научите:
Въпроси за интервю за Java Collections
В # 1) Обяснете рамката на Java Collections.
Отговор: Java Collections Framework е архитектура, която помага при управлението и съхраняването на група обекти. С него разработчиците могат да получат достъп до предварително опаковани структури от данни и да манипулират данни с помощта на алгоритми.
Java колекцията включва интерфейс и класове, които поддържат операции като търсене, изтриване, вмъкване, сортиране и др. Наред с интерфейса и класовете, Java колекциите включват и алгоритми, които помагат при манипулации.
В # 2) Какви са предимствата на Java Collections?
Отговор:
Предимствата на Java Collections са:
- Вместо да прилага нашите класове за събиране, той използва основните класове за събиране, като по този начин намалява усилията, необходими за неговото развитие.
- Той използва класовете на рамката за събиране, които са добре тествани. Следователно качеството на кода му се подобрява.
- Намалява усилията за поддръжка на кода.
- Java Collection Framework е оперативно съвместим и многократно използван.
В # 3) Какво знаете за йерархията на колекциите в Java?
Отговор:
(изображение източник )
В # 4) Разкажете ни за основните интерфейси на Java Collection.
Отговор:
По-долу са изброени основните интерфейси на Java Collection Framework.
Колекция: Той е основата на йерархията на Collection и представлява нейните елементи. Java обаче не предоставя пряко приложение на Collection. Освен това повечето от колекциите на Java идват от този интерфейс.
Комплект: Той не може да съдържа дублиращи се елементи, тъй като моделира абстракцията на математическия набор. Както подсказва името, той представлява множества, например, тесте карти.
Списък: Той може да съдържа дублиращи се елементи и е подредена колекция. Можете да използвате неговия индекс за достъп до всеки елемент в него. Списъкът е като подреждане, масив с динамична дължина.
Това са няколко интерфейса на Java Collection. Има обаче още няколко интерфейса, както е показано по-долу.
- Опашка
- Отмяна
- Итератор
- Итерируемо
- SortedSet
- ListIterator.
В # 5) Защо сериализуемите и клонируемите интерфейси не се разширяват от колекцията Интерфейс?
Отговор: Задачата на интерфейса за събиране е да посочи група обекти, наречени елементи. Прилагането на колекциите решава как ще се поддържат елементите. Например, изпълнението на списъка позволява дублиращи се елементи, но изпълненията на Set не позволяват.
Много реализации имат метод за публично клониране. Но не е практично да го включвате във всички реализации на Collection, тъй като Collection е абстрактна, а изпълнението е всичко, което има значение.
Значението и последствията както на сериализацията, така и на клонирането имат смисъл, докато се работи със съществените реализации. Следователно от реалното изпълнение зависи дали може да бъде сериализирано или клонирано и как.
Научете повече = >> Интерфейс на маркер в Java: Сериализуем и клонируем
Ето защо предизвикването на сериализация и клониране във всяко изпълнение не е много гъвкаво и ограничаващо.
В # 6) Какво разбирате от Iterator в Java Collection Framework?
Отговор: В масиви от семпли можем да използваме цикли за достъп до всеки елемент. Когато е необходим подобен подход за достъп до елементи в колекция, ние използваме итератори. Iterator е конструкция, използвана за достъп до елементи на обекти на Collection.
В Java итераторите са обектите, които реализират интерфейса “Итератор” на Collection Framework. Този интерфейс е част от пакета java.util.
Някои от характеристиките на итераторите са:
- Итераторите се използват за пресичане на обектите Collection.
- Итераторите са известни като „Universal Java Cursor“, тъй като можем да използваме един и същ итератор за всички колекции.
- Итераторите предоставят операции „Четене“ и „Премахване“, освен че обхождат колекциите.
- Тъй като те са универсални и работят с всички колекции, итераторите са по-лесни за изпълнение.
Списък с въпроси за колекцията Java
В # 7) Знаете ли как се използва интерфейсът на списъка?
(изображение източник )
Отговор: Целта на списъчния интерфейс е да поддържа реда на вмъкване. Също така позволява съхранението на дублирани стойности.
Той помага за гладкото манипулиране на елементите в зависимост от индекса му с различните методи, които съдържа. ArrayList, Vector, Stack и LinkedList са различните класове, които реализират списъчния интерфейс.
В # 8) Какво разбирате от ArrayList в Java?
Отговор: Изпълнението на списъчния интерфейс е ArrayList. Той динамично добавя или премахва елементи от списъка и също така осигурява вмъкване на елементи заедно с позиционния достъп. ArrayList разрешава дублирани стойности и неговият размер може динамично да се увеличава, ако броят на елементите надвишава първоначалния размер.
В # 9) Как ще преобразувате низ от масив в ArrayList?
Отговор: Това е въпрос за програмиране на ниво начинаещ, който интервюиращият иска да провери вашето разбиране за Collection utility.classes. Collection и Arrays са двата полезни класа на Framework за събиране, от които интервюиращите често се интересуват.
Колекциите предлагат определени статични функции за изпълнение на конкретни задачи по типове колекции. Докато 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);
В # 10) Преобразуване на Array в ArrayList и ArrayList в Array.
Отговор: За конвертиране на ArrayList в Array се използва методът toArray () - List_object.toArray (нов String (List_object.size ()))
Докато методът asList () се използва за преобразуване на Array в ArrayList- Arrays.asList (елемент). AsList () е статичен метод, при който обектите на списък са параметрите.
Въпрос # 11) Какво представлява LinkedList и колко вида се поддържат в Java?
(изображение източник )
Отговор: LinkedList е структура от данни с поредица от връзки, където всяка връзка е свързана със следващата връзка.
Два типа LinkedList се използват в Java за съхраняване на елементите:
- Единично свързан списък: Тук всеки възел съхранява данните на възела заедно с препратка или указател към следващия възел.
- Двойно свързан списък: Двойно LinkedList се предлага с двойни препратки, една препратка към следващия възел и друга за предишния възел.
В # 12) Какво разбирате от BlockingQueue?
Отговор: В обикновена опашка знаем, че когато опашката е пълна, не можем да вмъкнем повече елементи. В този случай опашката просто предоставя съобщение, че опашката е пълна и излиза. Подобен случай се случва, когато опашката е празна и в опашката няма елемент, който да бъде премахнат.
Вместо просто да излезете, когато вмъкването / премахването не може да бъде направено, какво ще кажете да изчакаме, докато можем да вмъкнем или премахнем елемента?
Това се отговаря чрез изменение на опашката, наречена „Блокираща опашка“ . При блокиране на опашката блокирането се активира по време на операции за опашка и отмяна, когато опашката се опитва да постави в опашка пълна опашка или да освободи празна опашка.
Блокирането е показано на следващата фигура.
BlockingQueue
По този начин, по време на операцията за опашка, блокиращата опашка ще изчака, докато пространство стане достъпно, за да може елементът да бъде успешно вмъкнат. По същия начин, в операцията за деактивиране опашката за блокиране ще изчака, докато елемент стане наличен за операцията.
как да инициализирам статична променлива в c ++
Блокиращата опашка реализира интерфейса ‘BlockingQueue’, който принадлежи към пакета ‘java.util.concurrent’. Трябва да помним, че интерфейсът BlockingQueue не позволява нулева стойност. Ако срещне null, тогава изхвърля NullPointerException.
В # 13) Какво е приоритетна опашка в Java?
Отговор: Приоритетна опашка в Java е подобна на структурите от данни за стека или опашката. Това е абстрактен тип данни в Java и е реализиран като клас PriorityQueue в пакета java.util. Приоритетната опашка има специална функция, че всеки елемент в опашката с приоритет има приоритет.
В приоритетна опашка елемент с по-висок приоритет е сървърът преди елемента с по-нисък приоритет.
Всички артикули в опашката с приоритет са подредени според естествената поръчка. Също така можем да подредим елементите според персонализиран ред, като осигурим компаратор по време на създаването на обект с приоритетна опашка.
Задайте въпроси за интервю за интерфейс
Въпрос # 14) Каква е ползата от Set Interface? Разкажете ни за класовете, изпълняващи това Интерфейс.
Отговор: Интерфейсът на множествата се използва в теорията на множествата за оформяне на математическия набор. Той е подобен на интерфейса на List и все пак е малко по-различен от него. Следователно Set Interface не е подредена колекция, няма запазена поръчка, когато премахвате или добавяте елементите.
По принцип не поддържа дублиращи се елементи, поради което всеки елемент в интерфейса Set е уникален.
Той също така позволява смислени сравнения на екземпляри от Set, дори когато има различни реализации. Също така, той сключва по-съществен договор за действията на операциите на equals и hashCode. Ако два примера имат едни и същи елементи, те са равни.
Поради всички тези причини Set Interface няма базирани на индекси на елементи операции като List. Той използва само наследени методи за интерфейс за събиране. TreeSet, EnumSet, LinkedHashSet и HashSet реализира Set Interface.
В # 15) Искам да добавя нулев елемент към HashSet и TreeSet. Мога ли?
Отговор: Не можете да добавите нито един нулев елемент в TreeSet, тъй като той използва NavigableMap за съхранение на елементи. Но можете да добавите само един към HashSet. SortedMap не позволява нулеви клавиши и NavigableMap е неговото подмножество.
Ето защо не можете да добавите нулев елемент към TreeSet, той ще излезе с NullPointerException всеки път, когато се опитате да направите това.
В # 16) Какво знаете за LinkedHashSet?
Отговор: LinkedHashSet е подкласът на HashSet и той налага Set Interface. Като подредена форма на HashSet, той управлява двойно свързан списък през всички елементи, които съдържа. Той запазва реда на вмъкване и точно като своя родителски клас, той носи само уникални елементи.
В # 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 се съхраняват като ключ в картата и обектът се представя като стойност.
Въпрос # 18) Обяснете метода EmptySet ().
Отговор: Методът Emptyset () премахва нулевите елементи и връща празния неизменяем набор. Този неизменим набор е сериализуем. Декларацията на метода на Emptyset () е- публичен статичен окончателен Set emptySet ().
Въпроси за интервю за интерфейса на картата
В # 19) Разкажете ни за интерфейса на картата.
Отговор: Map Interface е предназначен за по-бързо търсене и съхранява елементите под формата на двойки ключ-стойности. Тъй като тук всеки ключ е уникален, той се свързва или съпоставя само с една стойност. Тези двойки ключ-стойности се наричат записи на картата.
В този интерфейс има подписи на методи за извличане, вмъкване и премахване на елементи в зависимост от уникалния ключ. Това го прави идеален инструмент за картографиране на асоциации ключ-стойност, като речник.
В # 20) Картата не разширява интерфейса за събиране. Защо?
Отговор: Интерфейсът за събиране е натрупване на обекти и тези обекти се съхраняват структурно с механизма на определен достъп. Докато интерфейсът на картата следва структурата на двойките ключ-стойност. Методът за добавяне на интерфейса за събиране не поддържа метода за поставяне на интерфейса на картата.
Ето защо Map не разширява интерфейса за събиране, но все пак е важна част от Java Collection Framework.
В # 21) Как HashMap работи в Java?
Отговор: HashMap е колекция, базирана на Map и нейните елементи се състоят от двойки ключ-стойност. HashMap обикновено се означава с или. Всеки елемент на хеш-карта може да бъде достъпен с помощта на неговия ключ.
HashMap работи на принципа на „хеширане“. В техниката на хеширане по-дълъг низ се трансформира в по-малък низ чрез „хеш функция“, която не е нищо друго освен алгоритъм. По-малкият низ помага за по-бързо търсене и ефективно индексиране.
Въпрос # 22) Обяснете IdentityHashMap, WeakHashMap и ConcurrentHashMap.
Отговор:
IdentityHashMap е подобно на HashMap. Разликата е, че докато сравнява елементи, IdentityHashMap използва референтно равенство. Това не е предпочитано внедряване на карта и въпреки че изпълнява интерфейса на картата, то не успява да спази общия договор на картата умишлено.
Така че, при сравняване на обекти, това разрешава използването на метода equals. Проектиран е за използване в редки случаи, когато човек се нуждае от семантика на референтно равенство.
WeakHashMap Внедряването съхранява само слаби препратки към своите ключове. Това позволява събирането на боклука на двойка ключ-стойност, когато няма повече препратка към ключовете му извън WeakHashMap.
Той се използва предимно с онези ключови обекти, при които тестът за идентичност на обекта се извършва от неговите равни методи, използвайки оператора ==.
ConcurrentHashMap реализира както ConcurrentMap, така и Serializable интерфейси. Това е подобрената, подобрена версия на HashMap, тъй като не работи добре с многонишковата среда. В сравнение с HashMap, той има по-висока производителност.
В # 23) Какво е качеството на добрия ключ за HashMap?
Отговор: Разбирайки как работи HashMap, е лесно да се знае, че те зависят главно от методите equals и hashCode на ключови обекти. Така че, добрият ключ трябва да предоставя един и същ hashCode отново и отново, независимо от времето, когато е извлечен.
По същия начин, в сравнение с метода equals, едни и същи ключове трябва да връщат true и различни ключове трябва да връщат false. Ето защо се казва, че най-добрият кандидат за ключове на HashMap са неизменните класове.
В # 24) Кога можете да използвате TreeMap?
(изображение източник )
Отговор: TreeMap, като специална форма на HashMap, поддържа подреждането на ключовете по подразбиране „естествено подреждане“, като нещо, което липсва в HashMap. Можете да го използвате за сортиране на обекти с някакъв ключ.
Например, ако искате да внедрите и отпечатате речник по азбучен ред, можете да използвате TreeMap заедно с TreeSet. Ще се сортира автоматично. Разбира се, бихте могли да направите това и ръчно, но работата ще бъде извършена по-ефективно с използването на TreeMap. Можете също да го използвате, ако случаен достъп е жизненоважен за вас.
Разлика между въпросите
В # 25) Каква е разликата между колекция и колекции?
Отговор:
колекция | Колекции |
---|---|
Не можем да използваме ListIterator за обхождане на набор. | ListIterator може да обходи списъка във всяка посока. |
Това е интерфейс. | Това е класа. |
Колекцията представлява група обекти като едно цяло. | Колекциите дефинират различни методи на полезност за обекти на колекции. |
Това е основният интерфейс на Collection Framework. | Колекциите са клас на полезност. |
Той извлича структурите от данни на Framework за събиране. | Колекциите съдържат много различни статични методи за подпомагане при манипулиране на структурата на данните. |
В # 26) По какво се различава Array от ArrayList?
Отговор:
Разликите между Array и ArrayList са дадени по-долу:
Масив | ArrayList |
---|---|
Масивът е силно типизиран клас. | ArrayList е свободно написан клас. |
Масивът не може да се преоразмерява динамично, размерът му е статичен. | ArrayList може да се променя динамично. |
Масивът не се нуждае от боксиране и разпаковане на елементи. | ArrayList се нуждае от бокс и декомпресиране на елементи. |
В # 27) Разграничаване между ArrayList и LinkedList.
Отговор:
ArrayList | LinkedList |
---|---|
ArrayList използва динамичния масив вътрешно за съхраняване на елементи. | LinkedList прилага двойно свързания списък. |
ArrayList манипулирането на елементи е доста бавно. | LinkedList манипулира своите елементи много по-бързо. |
ArrayList може да действа единствено като списък. | LinkedList може да действа едновременно като Списък и Опашка. |
Полезно за съхранение и достъп до данни. | Полезно за манипулиране на данни. |
В # 28) С какво Iterable се различава от Iterator?
Отговор:
Итерируемо | Итератор |
---|---|
Това е интерфейс на пакета Java.lang. | Това е интерфейсът на пакета Java.util. |
Дава само един абстрактен метод, известен като Итератор. | Предлага се с два абстрактни метода - hasNext и next. |
Представлява поредица от елементи, които могат да бъдат обходени. | Стои за обекти със състояние на итерация. |
Q # 29) Посочете разликите между Set и List.
Отговор:
Комплект | Списък |
---|---|
Set изпълнява Set интерфейс. | Списъкът изпълнява интерфейса List. |
Set е неподреден набор от елементи. | Списъкът е подреден набор от елементи. |
Комплектът не поддържа реда на елементите по време на вмъкването. | Списъкът запазва реда на елементите по време на вмъкването. |
Комплектът не позволява дублирани стойности. | Списъкът позволява дублирани стойности. |
Комплектът не съдържа наследствен клас. | Списъкът съдържа Vector, наследствен клас. |
Комплектът позволява само една нулева стойност. | Няма ограничение за броя на нулевите стойности в списъка. |
В # 30) Каква е разликата между Queue и Stack?
Отговор:
Опашка | Стек |
---|---|
Опашката работи на принципа на подхода First-In-First-Out (FIFO). | Стекът работи на основата „Последно влизане първо (LIFO)“. |
Вмъкването и изтриването в опашката се извършват в различни краища. | Вмъкването и изтриването се извършват от същия край, наречен горната част на стека. |
Enqueue е името на Insertion, а dequeue е изтриването на елементи. | Push е вмъкване, а Pop е изтриване на елементи в стека. |
Той има два указателя - един към първия елемент от списъка (отпред) и един към последния (отзад). | Той има само един указател, сочещ към горния елемент. |
Въпрос # 31) Как се различават SinglyLinkedList и DoublyLinkedList?
Отговор:
Единично свързан списък | Двойно свързан списък |
---|---|
Всеки възел от единично свързания списък се състои от данни и указател към следващия възел. | Двойно свързан списък се състои от данни, указател към следващия възел и указател към предишния възел. |
Единично свързаният списък може да бъде преместен с помощта на следващия указател. | Двойно свързан списък може да бъде преместен с помощта на предишния и следващия указател. |
Единично свързаният списък отнема по-малко място в сравнение с двойно свързания списък. | Двойно свързаният списък заема много място в паметта. |
Достъпът до елементите не е много ефективен. | Достъпът до елементите е ефективен. |
В # 32) По какво се различава HashMap от HashTable?
Отговор:
HashMap | HashTable |
---|---|
HashMap наследява клас AbstractMap | HashTable наследява класа на речника. |
HashMap не се синхронизира. | HashTable е синхронизиран. |
HashMap позволява множество нулеви стойности, но само един нулев ключ. | HashTable не позволява нулева стойност или ключ. |
HashMap е по-бърз. | HashTable е по-бавен от HashMap. |
HashMap може да бъде преминат от Iterator. | HashTable не може да бъде преминат използвайки итератор или изброител. |
Въпрос # 33) Избройте разликата между ArrayList и Vector.
Отговор:
ArrayList | Вектор |
---|---|
ArrayList не е синхронизиран. | Векторът се синхронизира. |
ArrayList не е наследствен клас. | Vector е наследствен клас. |
ArrayList увеличава размера наполовина от ArrayList, когато елемент е вмъкнат извън неговия размер. | Vector увеличава размера си двойно, когато елемент е вмъкнат извън неговия размер. |
ArrayList не е безопасен за нишки | Vector е безопасен за нишки. |
В # 34) С какво FailFast се различава от Failsafe?
Отговор:
FailFast | FailSafe |
---|---|
Докато се повтаря, не се допуска модификация на колекция. | Позволява модификация по време на итерация. |
Използва оригинална колекция за обхождане. | Използва копие на оригиналната колекция. |
Не се изисква допълнителна памет. | Нуждае се от допълнителна памет. |
Изхвърля ConcurrentModificationException. | Не се прави изключение. |
Заключение
Тези въпроси за интервюта за Java Collections ще ви помогнат да се подготвите за интервюто. Вашата подготовка за интервюто за Java Collections трябва да бъде задълбочена и обширна, така че изучете тези въпроси и разберете добре концепцията.
Тези въпроси не само проверяват вашите знания, но и вашето присъствие на ума.
=> Внимавайте тук за простите учебни серии за Java
Препоръчително четене
- Урок за JAVA за начинаещи: 100+ практически ръководства за Java видео
- Основи на Java: Синтаксис на Java, клас Java и основни концепции на Java
- Интервюирайте въпроси и отговори
- Въпроси и отговори за интервю за ETL тестване
- 30 водещи въпроса и отговори за интервю за HTML (СПИСЪК 2021)
- Топ 30+ популярни въпроси и отговори за интервю за краставици
- Топ 40 въпроси и отговори за интервю за Java 8 (Най-важните)
- Топ 30 SAS интервюта въпроси и отговори