logo

34 Въпроси за интервю за колекции на Java

В Java въпросите за интервю за колекция се задават най-често от интервюиращите. Ето списъка с най-често задаваните въпроси за интервю с колекции с отговори.


1) Какво представлява рамката за събиране в Java?

Collection Framework е комбинация от класове и интерфейс, който се използва за съхраняване и манипулиране на данните под формата на обекти. Той предоставя различни класове като ArrayList, Vector, Stack и HashSet и т.н. и интерфейси като List, Queue, Set и т.н. за тази цел.


2) Какви са основните разлики между масив и колекция?

Масивът и колекцията са донякъде сходни по отношение на съхраняването на референциите на обектите и манипулирането на данните, но се различават по много начини. Основните разлики между масива и колекцията са дефинирани по-долу:

  • Масивите винаги са с фиксиран размер, т.е. потребителят не може да увеличава или намалява дължината на масива според техните изисквания или по време на изпълнение, но в колекцията размерът може да се променя динамично според нуждите.
  • Масивите могат да съхраняват само хомогенни или подобни обекти, но в Collection могат да се съхраняват хетерогенни обекти.
  • Масивите не могат да осигурят ?готовото? методи за потребителски изисквания като сортиране, търсене и т.н., но колекцията включва готови методи за използване.

3) Обяснете различните интерфейси, използвани в рамката на колекцията?

Framework за събиране имплементира различни интерфейси, интерфейсът за събиране и интерфейсът за карта (java.util.Map) са основно използваните интерфейси на Java Collection Framework. Списъкът с интерфейси на Collection Framework е даден по-долу:

1. Интерфейс за събиране: Колекцията (java.util.Collection) е основният интерфейс и всяка колекция трябва да реализира този интерфейс.

Синтаксис:

 public interface Collectionextends Iterable 

Където означава, че този интерфейс е от общ тип

2. Интерфейс на списъка: Интерфейсът на списъка разширява интерфейса на колекцията и е подредена колекция от обекти. Съдържа дублиращи се елементи. Той също така позволява произволен достъп на елементи.

Синтаксис:

 public interface List extends Collection 

3. Задайте интерфейс: Интерфейсът Set (java.util.Set) е колекция, която не може да съдържа дублиращи се елементи. Може да включва само наследени методи на интерфейса за събиране

Синтаксис:

 public interface Set extends Collection 

Интерфейс на опашка: Интерфейсът на опашката (java.util.Queue) дефинира структурата на данните на опашката, която съхранява елементите във формата FIFO (първи влязъл, първи излязъл).

Синтаксис:

 public interface Queue extends Collection 

4. Интерфейс за премахване на опашката: това е опашка с двоен край. Позволява поставянето и премахването на елементи от двата края. Той имплантира свойствата както на стека, така и на опашката, така че да може да изпълнява LIFO (последен влязъл, първи излязъл) стек и FIFO (първи влязъл, първи излязъл) опашка, операции.

Синтаксис:

 public interface Dequeue extends Queue 

5. Интерфейс на картата: Карта (java.util.Map) представлява ключ, двойка стойност за съхранение на елементи. Интерфейсът на картата не изпълнява интерфейса за събиране. Може да съдържа само уникален ключ, но може да има дублирани елементи. Има два интерфейса, които имплементират Map в java, които са Map interface и Sorted Map.

преименуване на директория

4) Каква е разликата между ArrayList и Vector?

Не.ArrayListвектор
1)ArrayList не е синхронизиран.Векторът е синхронизиран.
2)ArrayList не е наследен клас.Vector е наследен клас.
3)ArrayList увеличава своя размер с 50% от размера на масива.Vector увеличава размера си чрез удвояване на размера на масива.
4)ArrayList не е ?thread-safe? тъй като не е синхронизиран.Векторният списък е ?thread-safe? тъй като всеки метод е синхронизиран.

5) Каква е разликата между ArrayList и LinkedList?

Не.ArrayListLinkedList
1)ArrayList използва динамичен масив.LinkedList използва двойно свързан списък.
2)ArrayList не е ефективен за манипулиране, защото се изисква твърде много.LinkedList е ефективен за манипулиране.
3)ArrayList е по-добър за съхраняване и извличане на данни.LinkedList е по-добър за манипулиране на данни.
4)ArrayList осигурява произволен достъп.LinkedList не предоставя произволен достъп.
5)ArrayList отнема по-малко натоварване на паметта, тъй като съхранява само обектLinkedList отнема повече памет, тъй като съхранява обекта, както и адреса на този обект.

6) Каква е разликата между Iterator и ListIterator?

Итераторът преминава през елементите само в посока напред, докато ListIterator преминава през елементите в посока напред и назад.

Не.ИтераторListIterator
1)Итераторът обхожда елементите само в посока напред.ListIterator преминава през елементите както в посоки назад, така и в посока напред.
2)Итераторът може да се използва в списък, набор и опашка.ListIterator може да се използва само в List.
3)Итераторът може да извършва операция за премахване само докато обхожда колекцията.ListIterator може да изпълнява ?add,? ?Премахване,? и ?задайте? операция, докато обхождате колекцията.

7) Каква е разликата между итератор и изброяване?

Не.ИтераторИзброяване
1)Итераторът може да обхожда наследени и ненаследени елементи.Изброяването може да обхожда само наследени елементи.
2)Итераторът е бърз на грешки.Изброяването не е бързо.
3)Итераторът е по-бавен от изброяването.Изброяването е по-бързо от итератора.
4)Итераторът може да извърши операция за премахване, докато обхожда колекцията.Изброяването може да извършва само операция за преминаване на колекцията.

8) Каква е разликата между List и Set?

Списъкът и наборът разширяват интерфейса за събиране. Има обаче някои разлики между двете, които са изброени по-долу.

  • Списъкът може да съдържа дублирани елементи, докато Set включва уникални елементи.
  • Списъкът е подредена колекция, която поддържа реда на вмъкване, докато Set е неподредена колекция, която не запазва реда на вмъкване.
  • Интерфейсът List съдържа един наследен клас, който е Vector клас, докато Set интерфейсът няма наследен клас.
  • Интерфейсът List може да позволи n на брой нулеви стойности, докато интерфейсът Set позволява само една нулева стойност.

9) Каква е разликата между HashSet и TreeSet?

HashSet и TreeSet, и двата класа, имплементират Set интерфейс. Разликите между двете са изброени по-долу.

  • HashSet не поддържа ред, докато TreeSet поддържа възходящ ред.
  • HashSet, възпрепятстван от хеш-таблица, докато TreeSet, реализиран от дървовидна структура.
  • HashSet работи по-бързо от TreeSet.
  • HashSet се поддържа от HashMap, докато TreeSet се поддържа от TreeMap.

10) Каква е разликата между Set и Map?

Разликите между Set и Map са дадени по-долу.

  • Наборът съдържа само стойности, докато картата съдържа и ключ, и стойности.
  • Наборът съдържа уникални стойности, докато картата може да съдържа уникални ключове с дублиращи се стойности.
  • Set съдържа единичен брой нулеви стойности, докато Map може да включва единичен нулев ключ с n брой нулеви стойности.

11) Каква е разликата между HashSet и HashMap?

Разликите между HashSet и HashMap са изброени по-долу.

  • HashSet съдържа само стойности, докато HashMap включва записа (ключ, стойност). HashSet може да бъде повторен, но HashMap трябва да се преобразува в Set, за да бъде повторен.
  • HashSet имплементира Set интерфейс, докато HashMap имплементира Map интерфейса
  • HashSet не може да има дублирана стойност, докато HashMap може да съдържа дублирани стойности с уникални ключове.
  • HashSet съдържа единствения брой нулеви стойности, докато HashMap може да съдържа единичен нулев ключ с n брой нулеви стойности.

12) Каква е разликата между HashMap и TreeMap?

Разликите между HashMap и TreeMap са дадени по-долу.

  • HashMap не поддържа ред, но TreeMap поддържа възходящ ред.
  • HashMap се изпълнява от хеш-таблица, докато TreeMap се изпълнява от дървовидна структура.
  • HashMap може да се сортира по ключ или стойност, докато TreeMap може да се сортира по ключ.
  • HashMap може да съдържа нулев ключ с множество нулеви стойности, докато TreeMap не може да съдържа нулев ключ, но може да има множество нулеви стойности.

13) Каква е разликата между HashMap и Hashtable?

Не.HashMapХеш таблица
1)HashMap не е синхронизиран.Хеш-таблицата е синхронизирана.
2)HashMap може да съдържа един нулев ключ и множество нулеви стойности.Hashtable не може да съдържа нулев ключ или нулева стойност.
3)HashMap не е ?thread-safe,? така че е полезно за ненишкови приложения.Hashtable е безопасен за нишки и може да се споделя между различни нишки.
4)4) HashMap наследява класа AbstractMapHashtable наследява класа Dictionary.

14) Каква е разликата между Collection и Collections?

Разликите между колекцията и колекциите са дадени по-долу.

  • Колекцията е интерфейс, докато колекциите са клас.
  • Интерфейсът за събиране предоставя стандартната функционалност на структурата на данните за списък, набор и опашка. Класът Collections обаче трябва да сортира и синхронизира елементите на колекцията.
  • Интерфейсът Collection предоставя методите, които могат да се използват за структура на данни, докато класът Collections предоставя статичните методи, които могат да се използват за различни операции върху колекция.

15) Каква е разликата между Comparable и Comparator?

Не.СравнимиКомпаратор
1)Comparable предоставя само един вид последователност.Comparator предоставя множество видове последователности.
2)Той предоставя един метод с име compareTo().Той предоставя един метод, наречен compare().
3)Намира се в пакета java.lang.Намира се в пакета java.util.
4)Ако внедрим интерфейса Comparable, действителният клас се променя.Реалният клас не се променя.

16) Какво разбирате под BlockingQueue?

BlockingQueue е интерфейс, който разширява интерфейса на Queue. Осигурява едновременност в операции като извличане, вмъкване, изтриване. Докато извлича всеки елемент, той изчаква опашката да не е празна. Докато съхранява елементите, той изчаква наличното пространство. BlockingQueue не може да съдържа нулеви елементи и внедряването на BlockingQueue е безопасно за нишки.

Синтаксис:

np.log
 public interface BlockingQueue extends Queue 

17) Какво е предимството на файла със свойства?

Ако промените стойността във файла със свойства, не е необходимо да компилирате отново Java класа. Така че това прави приложението лесно за управление. Използва се за съхраняване на информация, която трябва да се променя често. Помислете за следния пример.

 import java.util.*; import java.io.*; public class Test { public static void main(String[] args)throws Exception{ FileReader reader=new FileReader('db.properties'); Properties p=new Properties(); p.load(reader); System.out.println(p.getProperty('user')); System.out.println(p.getProperty('password')); } } 

Изход

 system oracle 

18) Какво означава методът hashCode()?

Методът hashCode() връща стойност на хеш код (цяло число).

Методът hashCode() връща същото цяло число, ако два ключа (чрез извикване на метод equals()) са идентични.

Въпреки това е възможно две номера на хеш кода да имат различни или еднакви ключове.

Ако два обекта не произведат еднакъв резултат с помощта на метода equals(), тогава методът hashcode() ще предостави различния целочислен резултат и за двата обекта.


19) Защо заместваме метода equals()?

Методът equals се използва за проверка дали два обекта са еднакви или не. Трябва да се отмени, ако искаме да проверим обектите въз основа на свойството.

Например Employee е клас, който има 3 члена с данни: id, име и заплата. Ние обаче искаме да проверим равенството на обекта на служителя чрез заплатата. След това трябва да заменим метода equals().


20) Как да синхронизирам елементите List, Set и Map?

Да, класът Collections предоставя методи за синхронизиране на елементите List, Set или Map:

публичен статичен списък synchronizedList(List l){}
публичен статичен Set synchronizedSet(Set s){}
публичен статичен SortedSet synchronizedSortedSet(SortedSet s){}
публична статична карта synchronizedMap(Map m){}
публичен статичен SortedMap synchronizedSortedMap(SortedMap m){}

21) Какво е предимството на генеричната колекция?

Има три основни предимства от използването на генеричната колекция.

  • Ако използваме генеричния клас, нямаме нужда от преобразуване на типове.
  • Той е безопасен за типа и се проверява по време на компилиране.
  • Generic потвърждава стабилността на кода, като го прави откриваем за грешки по време на компилиране.

22) Какво е хеш-сблъсък в Hashtable и как се обработва в Java?

Два различни ключа с една и съща хеш стойност са известни като хеш-сблъсък. Два отделни записа ще се съхраняват в една хеш-кофа, за да се избегне сблъсък. Има два начина за избягване на хеш-сблъсък.

  • Отделно верижно свързване
  • Отворете Адресиране

23) Какво представлява класът Речник?

Класът Dictionary предоставя възможност за съхраняване на двойки ключ-стойност.


24) Какъв е размерът по подразбиране на коефициента на натоварване при колекция, базирана на хеширане?

Размерът по подразбиране на фактора на натоварване е 0,75 . Капацитетът по подразбиране се изчислява като начален капацитет * коефициент на натоварване. Например 16 * 0,75 = 12. Така че 12 е капацитетът по подразбиране на Map.


25) Какво разбирате под отказ?

Итераторът в java, който незабавно хвърля ConcurrentmodificationException, ако настъпи някаква структурна модификация, се извиква като Fail-fast итератор. Итераторът на Fail-fats не изисква допълнително място в паметта.


26) Каква е разликата между Array и ArrayList?

Основните разлики между Array и ArrayList са дадени по-долу.

SNМасивArrayList
1Масивът е с фиксиран размер, което означава, че не можем да променим размера на масива според нуждите.ArrayList не е с фиксиран размер, можем да променим размера динамично.
2Масивите са от статичен тип.ArrayList е с динамичен размер.
3Масивите могат да съхраняват примитивни типове данни, както и обекти.ArrayList не може да съхранява примитивните типове данни, той може да съхранява само обектите.

27) Каква е разликата между дължината на масива и размера на ArrayList?

Дължината на масив може да бъде получена с помощта на свойството length, докато ArrayList не поддържа свойството length, но можем да използваме метод size(), за да получим броя на обектите в списъка.

Намиране на дължината на масива

 Int [] array = new int[4]; System.out.println('The size of the array is ' + array.length); 

Намиране на размера на ArrayList

 ArrayList list=new ArrayList(); list.add('ankit');�� list.add('nippun'); System.out.println(list.size()); 

28) Как да конвертирате ArrayList в Array и Array в ArrayList?

Можем да конвертираме масив в ArrayList, като използваме метода asList() на класа Arrays. Методът asList() е статичен метод на клас Arrays и приема обекта List. Разгледайте следния синтаксис:

 Arrays.asList(item) 

Можем да конвертираме ArrayList в Array с помощта на метода toArray() на класа ArrayList. Помислете за следния синтаксис, за да преобразувате ArrayList в обект List.

 List_object.toArray(new�String[List_object.size()]) 

29) Как да направя Java ArrayList само за четене?

Можем да получим java ArrayList само за четене, като извикаме метода Collections.unmodifiableCollection(). Когато дефинираме ArrayList като Read-only, тогава не можем да извършим никакви модификации в колекцията чрез метода �add(), remove() или set().


30) Как да премахнете дубликати от ArrayList?

Има два начина за премахване на дубликати от ArrayList.

    Използване на HashSet:С помощта на HashSet можем да премахнем дублиращия се елемент от ArrayList, но след това няма да запази реда на вмъкване.Използване на LinkedHashSet:Можем също да поддържаме реда за вмъкване, като използваме LinkedHashSet вместо HashSet.

Процесът за премахване на дублиращи се елементи от ArrayList с помощта на LinkedHashSet:

  • Копирайте всички елементи на ArrayList в LinkedHashSet.
  • Изпразнете ArrayList с помощта на метода clear(), който ще премахне всички елементи от списъка.
  • Сега копирайте всички елементи на LinkedHashset в ArrayList.

31) Как да обърна ArrayList?

За да обърнем ArrayList, можем да използваме метода reverse() на класа Collections. Помислете за следния пример.

 import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; public class ReverseArrayList { public static void main(String[] args) { List list = new ArrayList(); list.add(10); list.add(50); list.add(30); Iterator i = list.iterator(); System.out.println('printing the list....'); while(i.hasNext()) { System.out.println(i.next()); } Iterator i2 = list.iterator(); Collections.reverse(list); System.out.println('printing list in reverse order....'); while(i2.hasNext()) { System.out.println(i2.next()); } } } 

Изход

 printing the list.... 10 50 30 printing list in reverse order.... 30 50 10 

32) Как да сортирам ArrayList в низходящ ред?

За да сортираме ArrayList в низходящ ред, можем да използваме метода reverseOrder на класа Collections. Помислете за следния пример.

 import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; public class ReverseArrayList { public static void main(String[] args) { List list = new ArrayList(); list.add(10); list.add(50); list.add(30); list.add(60); list.add(20); list.add(90); Iterator i = list.iterator(); System.out.println('printing the list....'); while(i.hasNext()) { System.out.println(i.next()); } Comparator cmp = Collections.reverseOrder(); Collections.sort(list,cmp); System.out.println('printing list in descending order....'); Iterator i2 = list.iterator(); while(i2.hasNext()) { System.out.println(i2.next()); } } } 

Изход

разлика между фирма и фирма
 printing the list.... 10 50 30 60 20 90 printing list in descending order.... 90 60 50 30 20 10 

33) Как да синхронизирам ArrayList?

Можем да синхронизираме ArrayList по два начина.

  • Използване на метода Collections.synchronizedList().
  • Използване на CopyOnWriteArrayList

3. 4) Кога да използвате ArrayList и LinkedList?

LinkedLists е по-добре да се използват за операции за актуализиране, докато ArrayLists е по-добре да се използват за операции за търсене.