Java Collection Framework byl představen v JDK 1.2 který obsahuje všechny třídy kolekce a rozhraní. Kolekce Java je rámec, který poskytuje mechanismus pro ukládání a manipulaci s kolekcí objektů. Umožňuje vývojářům přístup k předem zabaleným datovým strukturám a algoritmům pro manipulaci s daty.
V tomto článku jsme pokryli 50 nejlepších Otázky k rozhovoru s Java Collections a Odpovědi které pokrývají vše od základních až po pokročilé koncepty kolekce Java, jako je kolekce navigace, WeakHashMap, streamy lambd atd. Ať už jste čerstvější nebo an zkušený Java vývojář Tyto otázky pro rozhovory o Java Collections vám dodají veškerou sebedůvěru, kterou potřebujete, abyste zvládli svůj příští pohovor v jazyce Java.
operační systém

Otázky k rozhovoru s Java Collections
50 otázek jsme rozdělili do dvou částí: Zkušení a Freshers. Začněme otázkami pro Freshers.
Obsah
Otázky k pohovoru o kolekci Java pro osvěžovače
1. Co je kolekce v Javě?
Termín sbírka odkazuje na skupinu objektů reprezentovaných jako jeden celek. Třídy v hierarchii tříd kolekce Java jsou rozděleny do dvou vykořenit rozhraní: Kolekce (java.util.Collection) a Mapa (java.util.Map) . Termíny, se kterými se setkáte při poznávání kolekce v Javě:
- Kolektivní rámec: Java's Collection Framework definuje třídy a rozhraní pro reprezentaci skupin objektů jako jedné entity. Vývojáři C++ mohou porovnat framework Collection s STL (standardní knihovna šablon) a Container Framework s Collection Framework, pokud pocházejí z prostředí C++.
- Rozhraní sbírky: Rozhraní třídy určuje, co by měla dělat, ne jak. Jinými slovy, je to plán pro třídu. Toto rozhraní poskytuje nejběžnější metody pro všechny objekty kolekce, které jsou součástí Collection Framework. Případně představuje jednotlivý objekt jako celek.
- Třída sbírek: Člen Collection Framework, je součástí balíčku java.util. Objekt kolekce je v této třídě vybaven mnoha obslužnými metodami.
2. Co je to framework v Javě?
Rámce jsou sady třídy a rozhraní které poskytují hotovou architekturu. Pro implementaci nových funkcí nebo tříd není nutné definovat rámec. Výsledkem je, že optimální objektově orientovaný návrh zahrnuje rámec obsahující kolekci tříd, které všechny provádějí podobné úkoly. Rámec lze použít různými způsoby, například voláním jeho metod, jeho rozšířením a poskytováním zpětných volání, posluchačů a dalších implementací. Některé z populárních frameworků v Javě jsou:
- Jaro
- Přezimovat
- Vzpěry
- Google Web Toolkit (GWT)
- JavaServer Faces (JSF)
3. Jaký je rozdíl mezi Array a Collection v Javě?
Pole jsou kolekce proměnných podobného typu se společným názvem v Javě. Mezi poli v Javě a C/C++ jsou určité rozdíly. Na druhou stranu kolekce jsou skupiny jednotlivých objektů, které tvoří jednu entitu známou jako kolekce objektů.
| Pole | Sbírka |
|---|---|
| Pole mají pevnou velikost, což znamená, že jakmile vytvoříme pole, nemůžeme je zvětšovat ani zmenšovat na základě našich požadavků. | Kolekce je pěstitelná v přírodě a vychází z našich požadavků. Velikost můžeme zvětšit nebo zmenšit. |
| S ohledem na paměť se pole nedoporučují používat. | S ohledem na paměť se doporučuje používat kolekce. |
| S ohledem na výkon se pro použití doporučují Arrays. | S ohledem na výkon se kolekce nedoporučuje používat. |
| Pole mohou obsahovat pouze prvky homogenních datových typů. | Kolekce může obsahovat jak homogenní, tak heterogenní prvky. |
Více informací naleznete v článku – Rozdíl mezi poli a kolekcemi v Javě
4. Jaká jsou různá rozhraní používaná v Java Collections Framework?
Kolekce je známá jako kořen hierarchie kolekce. Kolekce představují skupiny objektů známé jako prvky. Platforma java neposkytuje žádnou přímou implementaci tohoto rozhraní, ale rozhraní Collection je implementováno třídami List a Set.
- Rozhraní sběru
- Rozhraní seznamu
- Nastavit rozhraní
- Rozhraní fronty
- Dequeue rozhraní
- Mapové rozhraní
5. Vysvětlete hierarchii frameworku Collection v Javě.
Všechny třídy a rozhraní vyžadované frameworkem kolekce jsou obsaženy v balíčku utility (java.util). Rámce kolekcí mají rozhraní nazývané iterovatelné rozhraní, které umožňuje iterátoru iterovat všechny kolekce. Kromě tohoto rozhraní funguje hlavní rozhraní kolekce jako kořen pro rámec kolekce. Všechny kolekce rozšiřují toto rozhraní kolekce, čímž rozšiřují vlastnosti iterátoru a metody tohoto rozhraní. Následující obrázek ilustruje hierarchii rámce kolekce.
Hierarchie kolekce Java
6. Jaké jsou výhody kolekce Framework?
Výhody kolekce Framework: Vzhledem k tomu, že nedostatek rámce kolekce způsobil výše uvedený soubor nevýhod, uvádíme výhody rámce kolekce.
- Konzistentní API: API má základní sadu rozhraní jako Sbírka , Soubor , Seznam nebo Mapa , všechny třídy (ArrayList, LinkedList, Vector atd.), které implementují tato rozhraní, mají nějaký společný soubor metod.
- Snižuje námahu při programování: Programátor se nemusí starat o design kolekce, ale může se soustředit na její nejlepší využití ve svém programu. Proto byl úspěšně implementován základní koncept objektově orientovaného programování (tj. abstrakce).
- Zvyšuje rychlost a kvalitu programu: Zvyšuje výkon poskytováním vysoce výkonných implementací užitečných datových struktur a algoritmů, protože v tomto případě nemusí programátor přemýšlet o nejlepší implementaci konkrétní datové struktury. Může jednoduše použít nejlepší implementaci k drastickému zvýšení výkonu svého algoritmu/programu.
7. Co je ArrayList v Javě?
ArrayList je součástí frameworku Java kolekce a je to třída balíčku java.util. Poskytuje nám dynamická pole v Javě. Hlavní výhody ArrayList jsou, pokud deklarujeme pole, je potřeba zmínit velikost, ale v ArrayList není nutné zmiňovat velikost ArrayList, pokud chcete zmínit velikost, můžete to udělat.

Obrázek seznamu polí
Více informací naleznete v článku – ArrayList v Javě
8. Jaký je rozdíl mezi Collection a Collections?
| Sbírka | Sbírky |
|---|---|
| Je to rozhraní. | Je to užitná třída. |
| Používá se k reprezentaci skupiny jednotlivých objektů jako jednoho celku. | Definuje několik obslužných metod, které se používají k práci s kolekcí. |
| Kolekce je rozhraní, které obsahuje statickou metodu od java8. Rozhraní může také obsahovat abstraktní a výchozí metody. | Obsahuje pouze statické metody. |
Více informací naleznete v článku – Kolekce vs kolekce v Javě s příkladem
9. Rozdíl mezi ArrayList a LinkedList v rámci java kolekce?

ArrayList a LinkedList
| ArrayList | Spojový seznam |
|---|---|
| Tato třída používá dynamické pole k uložení prvků v něm. Se zavedením generik tato třída podporuje ukládání všech typů objektů. | Tato třída používá dvojitě propojený seznam k uložení prvků v něm. Podobně jako ArrayList i tato třída podporuje ukládání všech typů objektů. |
| Manipulace s ArrayList zabere více času kvůli interní implementaci. Kdykoli odstraníme prvek, interně se pole projde a paměťové bity se posunou. | Manipulace LinkedList zabere méně času ve srovnání s ArrayList, protože v dvojitě propojeném seznamu neexistuje žádný koncept posunu paměťových bitů. Seznam se projde a odkaz se změní. |
| Tato třída implementuje rozhraní List. Toto funguje jako seznam. | Tato třída implementuje rozhraní List i rozhraní Deque. Proto může fungovat jako seznam a deque. |
| Tato třída funguje lépe, když aplikace vyžaduje ukládání dat a přístup k nim. | Tato třída funguje lépe, když aplikace vyžaduje manipulaci s uloženými daty. |
Více informací naleznete v článku – ArrayList vs LinkedList v Javě
10. Co je to iterátor?
Java's Collection framework používá iterátory k načítání prvků jeden po druhém. Tento iterátor je univerzální, protože jej lze použít s jakýmkoli typem objektu Collection. Pomocí Iteratoru můžeme provádět operace čtení i odstraňování. Toto je vylepšená verze Enumeration s přidáním odstranění prvků.
Při výčtu prvků ve všech implementovaných rozhraních Collection framework, jako je např Soubor , Seznam , Fronta , O čem , a všechny implementované třídy Map, musí být použit Iterátor. Jediný dostupný kurzor pro celý rámec kolekce je iterátor. Pomocí metody iterator() v rozhraní kolekce můžete vytvořit objekt iterátoru.
Syntax:
Iterator itr = c. iterator ();>
Poznámka: Zde c je libovolný objekt kolekce. itr je rozhraní typu Iterator a odkazuje na c.
Více informací naleznete v článku – Iterátory v Javě
11. Jaký je rozdíl mezi Iterátorem a Enumerací?
Hlavní rozdíl mezi iterátorem a výčtem je v tom, že iterátory mají metodu remove(), zatímco výčty nikoli. Pomocí Iteratoru tedy můžeme manipulovat s objekty jejich přidáváním a odebíráním z kolekcí. Protože výčet může pouze procházet objekty a načítat je, chová se jako rozhraní pouze pro čtení.
Více informací naleznete v článku – Rozdíl mezi Iterátorem a Enumerací
12. Jaký je rozdíl mezi List a Set v Javě
Hlavní rozdíl mezi seznamem a sadou je v tom, že seznam může obsahovat duplicitní prvky, zatímco sada obsahuje pouze jedinečné prvky. Seznam je uspořádaný a zachovává pořadí objektu, ke kterému jsou přidány. Sada je neobjednaná.
| Seznam | Soubor |
|---|---|
| Seznam je indexovaná sekvence. | Sada je neindexovaná sekvence. |
| Seznam umožňuje duplicitní prvky | Sada neumožňuje duplicitní prvky. |
| K prvkům lze přistupovat podle jejich polohy. | Pozice přístup k prvkům není povolen. |
| Lze uložit více nulových prvků. | Nulové prvky lze uložit pouze jednou. |
| Implementace seznamu jsou ArrayList, LinkedList, Vector, Stack | Implementace sady jsou HashSet, LinkedHashSet. |
Více informací naleznete v článku – Rozdíl mezi seznamem a sadou v Javě
13. Jaké jsou nejlepší postupy pro Java Collections Framework?
Níže jsou uvedeny některé osvědčené postupy při používání kolekcí Java:
- Programy by měly být napsány jako rozhraní, nikoli implementace, takže implementaci můžeme později upravit.
- Kdykoli je to možné, použijte Generics k zajištění bezpečnosti typu a vyhněte se výjimkám ClassCastExceptions.
- Výběr vhodného typu kolekce na základě potřeby. Pokud je například velikost pevná, můžeme chtít použít Array přes ArrayList. Při iteraci přes mapu bychom měli použít LinkedHashMap. Set je nejlepší způsob, jak se vyhnout duplicitám.
- Použijte neměnné třídy poskytované JDK jako klíče v Map, abyste se vyhnuli implementaci hashCode() a equals().
- Abychom zvýšili čitelnost kódu, měli bychom místo zjišťování velikosti kolekce a jejího porovnávání s nulou použít isEmpty().
- Namísto psaní vlastní implementace použijte třídu obslužných programů Collections, abyste místo toho získali kolekce pouze pro čtení, synchronizované nebo prázdné. Vylepšuje opětovné použití kódu a zároveň má za následek větší stabilitu.
14. Co je prioritní fronta v Javě?
PriorityQueues se používají ke zpracování objektů podle jejich priority. Fronty se řídí algoritmem First-In-First-Out, ale někdy je třeba prvky fronty zpracovat podle jejich priority, což je místo, kde do hry vstupuje PriorityQueue. Prioritní fronty jsou založeny na prioritních haldách.
Prvky prioritní fronty jsou seřazeny podle přirozeného řazení nebo pomocí komparátoru poskytnutého v době vytváření fronty, v závislosti na použitém konstruktoru.

Prioritní fronty v Javě
Prohlášení:
public class PriorityQueue extends AbstractQueue implements Serializable where E is the type of elements held in this queue>
Třída implementuje rozhraní Serializable, Iterable, Collection a Queue.
15. Jaký je rozdíl mezi seznamem, sadou a mapou v jazyce Java?
| Seznam | Soubor | Mapa |
|---|---|---|
| Rozhraní seznamu umožňuje duplicitní prvky | Sada neumožňuje duplicitní prvky. | Mapa neumožňuje duplicitní prvky |
| Seznam zachovává pořadí vložení. | Sada neudržuje žádné pořadí vložení. | Mapa také neuchovává žádné pořadí vložení. |
| Můžeme přidat libovolný počet hodnot null. | Ale v sadě téměř jen jedna nulová hodnota. | Mapa umožňuje maximálně jeden klíč null a libovolný počet hodnot null. |
| Třídy implementace seznamu jsou Array List a LinkedList. | Třídy implementace sady jsou HashSet, LinkedHashSet a TreeSet. | Třídy implementace map jsou HashMap, HashTable, TreeMap, ConcurrentHashMap a LinkedHashMap. |
Více informací naleznete v článku – Rozdíl mezi seznamem, sadou a mapou v Javě
16. Jaký je rozdíl mezi Queue a Stack?
| Zásobník | Fronta |
|---|---|
| Stacks funguje na principu LIFO, což znamená, že prvek vložený jako poslední bude prvním prvkem, který bude vyjmut. | Fronty fungují na principu FIFO, což znamená, že prvek vložený jako první bude prvním prvkem, který bude vyjmut. |
| V zásobníku se vkládání a mazání provádí pouze shora. | Ve frontách se vkládání provádí na konec seznamu a mazání probíhá od začátku seznamu. |
| Operace vložení se nazývá operace push. | Operace vložení se nazývá operace fronty. |
| Operace odstranění se nazývá operace pop. | Operace odstranění se nazývá operace vyřazení z fronty. |
| Horní část zásobníku vždy ukazuje na poslední prvek v seznamu, což je jediný ukazatel používaný pro přístup k seznamu. | Pro přístup k frontám jsou udržovány dva ukazatele. Přední ukazatel ukazuje na první vložený prvek a zadní ukazatel ukazuje na poslední vložený prvek. |
17. Co je BlockingQueue v Javě?
Rozhraní BlockingQueue v Javě je přidáno v Javě 1.5 spolu s různými dalšími souběžnými třídami Utility jako ConcurrentHashMap, Counting Semaphore, CopyOnWriteArrrayList atd. Rozhraní BlockingQueue podporuje řízení toku (kromě fronty) zavedením blokování, pokud je některá BlockingQueue plná nebo prázdná.
Vlákno, které se pokouší zařadit prvek do plné fronty, je zablokováno, dokud nějaké jiné vlákno neuvolní místo ve frontě, buď vyřazením jednoho nebo více prvků z fronty, nebo úplným vymazáním fronty. Podobně blokuje vlákno, které se pokouší odstranit z prázdné fronty, dokud některá jiná vlákna nevloží položku. BlockingQueue nepřijímá hodnotu null. Pokud se pokusíme zařadit do fronty nulovou položku, vyvolá výjimku NullPointerException.
Použití BlockingQueue

Blokovací fronta v Javě
Hierarchie BlockingQueue

Hierarchie blokovací fronty v Javě
Prohlášení:
public interface BlockingQueue extends Queue>
Tady, A je typ prvků uložených v kolekci.
Více informací naleznete v článku – BlockingQueue Interface v Javě
18. Co je hashCode()?

Obrázek demonstrující Java Hash Code
Metoda hashCode() vrací hodnotu hashcode jako celé číslo. Je definována ve třídě Java Object, která počítá hodnoty hash daných vstupních objektů. Hodnota hashcode se většinou používá ve sbírkách založených na hashování, jako je HashMap, HashSet, HashTable….atd. Tato metoda musí být přepsána v každé třídě, která přepíše metodu equals().
Syntaxe:
public int hashCode() // This method returns the hash code value // for the object on which this method is invoked.>
Více informací naleznete v článku – metody equals() a hashCode() v Javě
19. Rozlišujte mezi ArrayList a Vector v Java Collection Framework.
Při sběrových rozhovorech je tato otázka často kladena; Vector je však synchronizován, zatímco ArrayList nikoli. ArrayList je rychlejší než Vector. Velikost pole ArrayList se v případě potřeby zvýší o 50 %, zatímco kapacita Vectoru se zdvojnásobí, kdykoli je to potřeba.

Seznam polí vs Vector v Javě
| ArrayList | Vektor |
|---|---|
| ArrayList není synchronizován | Vektor je synchronizován. |
| Pokud počet prvků překročí jeho kapacitu, velikost ArrayList se zvýší až o 50 % aktuální velikosti pole. | Pokud počet prvků překročí jeho kapacitu, velikost ArrayList se zvýší až o 100 % aktuální velikosti pole. |
| ArrayList je rychlý, protože není synchronizovaný. | Vector je pomalejší, protože je synchronizovaný. |
| Rozhraní iterátoru se používá k procházení prvků | K procházení vektoru lze použít rozhraní iterátoru nebo Enumeration. |
Více informací naleznete v článku – Vector vs ArrayList v Javě
20. Rozlišujte mezi Iterator a ListIterator.
| Iterátor | ListIterator |
|---|---|
| Může procházet prvky přítomné v kolekci pouze směrem dopředu. | Dokáže procházet prvky přítomné ve sbírce ve směru dopředu i dozadu. |
| Pomáhá procházet mapou, seznamem a sadou. | Může procházet pouze seznamem a nikoli dalšími dvěma. |
| Indexy nelze získat pomocí Iterátoru. | Má metody jako nextIndex() a previousIndex() pro získání indexů prvků kdykoli při procházení seznamu. |
| Nelze upravit ani nahradit prvky přítomné ve sbírce | Prvky můžeme upravit nebo nahradit pomocí set(E e) |
Více informací naleznete v článku – Rozdíl mezi Iterátorem a ListIteratorem
21. Jaký je rozdíl mezi Iterátorem a Enumerací?
Iterátor: Je to univerzální iterátor, protože jej můžeme aplikovat na jakýkoli objekt Collection. Pomocí iterátoru můžeme provádět operace čtení i odstraňování.
Syntax:
// Here 'c' is any Collection object. itr is of // type Iterator interface and refers to 'c' Iterator itr = c.iterator();>
Výčet: Enumeration (nebo enum) je uživatelsky definovaný datový typ. Používá se hlavně k přiřazování názvů integrálním konstantám, názvy usnadňují čtení a údržbu programu.
Syntax:
// A simple enum example where enum is declared // outside any class (Note enum keyword instead of // class keyword) enum Color { RED, GREEN, BLUE; }> | Iterátor | Výčet |
|---|---|
| Iterátor je univerzální kurzor, protože je použitelný pro všechny třídy kolekce. | Výčet není univerzální kurzor, protože se vztahuje pouze na starší třídy. |
| Iterátor má metodu remove(). | Výčet nemá metodu remove(). |
| Iterátor může provádět úpravy (např. pomocí metody remove(), která odebere prvek z kolekce během procházení). | Výčtové rozhraní funguje jako rozhraní pouze pro čtení, při procházení prvky kolekce nelze provádět žádné úpravy kolekce. |
| Iterátor není starší rozhraní. Iterátor lze použít k procházení HashMap, LinkedList, ArrayList, HashSet, TreeMap a TreeSet. | Enumeration je starší rozhraní, které se používá pro procházení Vector a Hashtable. |
Více informací naleznete v článku – Rozdíl mezi Iterátorem a Enumerací
22. Jaké jsou vlastnosti Java Hashmap?
HashMap je podobný HashTable, ale je nesynchronizovaný. Umožňuje nám ukládat i nulové klíče, ale měl by existovat pouze jeden objekt nulového klíče a může existovat libovolný počet hodnot null. Tato třída neposkytuje žádné záruky ohledně pořadí mapy. Chcete-li použít tuto třídu a její metody, musíte provést import java.util. HashMap balíčku nebo jeho nadtřídy.

HashMap v Javě
Syntax:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable>
Parametry: Vyžaduje dva parametry, a to následující:
- Typ klíčů spravovaných touto mapou (K)
- Typ mapovaných hodnot (V)
Více informací naleznete v článku – HashMap v Javě s příklady
23. Co jsou rozhraní kolekce?
The Sbírka rozhraní je členem Java Collections Framework. Je součástí java.util balík. Je to jedno z kořenových rozhraní hierarchie kolekcí. Rozhraní Collection není přímo implementováno žádnou třídou. Je však implementován nepřímo prostřednictvím svých podtypů nebo podrozhraní, jako je seznam, fronta a sada.
Například, třída HashSet implementuje rozhraní Set, které je podrozhraním rozhraní Collection. Pokud implementace kolekce neimplementuje konkrétní operaci, měla by definovat odpovídající metodu pro vyvolání UnsupportedOperationException.
Hierarchie sbírky:

Rozhraní kolekce v Javě
24. Vysvětlete rozhraní seznamu.

Rozhraní třídy v Javě
V Javě umožňuje rozhraní Seznam uživateli uložit uspořádanou kolekci objektů. Seznam je podřízeným rozhraním kolekce. V kolekci je seznam uspořádaná kolekce objektů, které mohou mít duplicitní hodnoty. Protože Seznam zachovává pořadí vložení, umožňuje poziční přístup a vkládání, což také umožňuje duplicitní hodnoty.
Syntax:
public interface List extends Collection ;>
Toto rozhraní seznamu je implementováno různými třídami jako ArrayList, Vector, Stack atd. Protože všechny podtřídy implementují seznam, můžeme vytvořit instanci objektu seznamu s kteroukoli z těchto tříd.
Příklad:
List al = new ArrayList ();
Seznam ll = new LinkedList ();
Seznam v = nový vektor ();Kde T je typ objektu

Seznam polí v Javě
Třídy, které implementují rozhraní Seznam, jsou následující:
- ArrayList
- Spojový seznam
- Vektor
- Zásobník
25. Napište program, který převede dané pole na kolekci pomocí metody asList().
K převodu dat založených na poli na data založená na kolekci můžeme použít java.util.pole třída. Tato třída poskytuje statickou metodu asList(T… a), která převádí pole na kolekci.
Jáva
// Convert an Array into Collection in Java> // import java util library> import> java.util.*;> > // class for writing logic of the problem> public> class> ArrayToCollection {> >public> static> void> main(String args[])> >{> >// array input> >String students[] = {>'Kamlesh'>,>'Abhay'>,> >'Abhishek'>,>'Shivansh'> };> > >// printing input elements for comparison> >System.out.println(>'Array input: '> >+ Arrays.toString(students));> > >// converting array into Collection> >// with asList() function> >List studentList = Arrays.asList(students);> > >// print converted elements> >System.out.println(>'Converted elements: '> >+ studentList);> >}> }> |
>
>Výstup
Array input: [Kamlesh, Abhay, Abhishek, Shivansh] Converted elements: [Kamlesh, Abhay, Abhishek, Shivansh]>
26. Rozlišujte mezi HashSet a HashMap
| HashSet | HashMap |
|---|---|
| HashSet implementuje rozhraní Set | HashMap implementuje rozhraní Map |
| Nejsou povoleny žádné duplikáty | Ano, jsou povoleny duplicitní hodnoty, ale není povolen žádný duplicitní klíč |
| Falešné hodnoty jsou v HashSet povoleny. | V HashMap nejsou povoleny žádné fiktivní hodnoty. |
| Během operace přidání je vyžadován jeden objekt | Během operace přidání jsou vyžadovány 2 objekty |
| Rychlost je poměrně pomalejší než HashMap | Rychlost je poměrně rychlejší než HashSet, protože zde byla použita hašovací technika. |
| Mít jedinou hodnotu null | Jeden klíč null a libovolný počet hodnot null |
| Pro vložení se používá metoda Add(). | Pro vkládání se používá metoda put (). |
Více informací naleznete v článku – Rozdíl mezi HashMap a HashSet
27. Rozlišujte mezi HashSet a HashTable.
| HashSet | HashTable |
|---|---|
| HashSet umožňuje prvky NULL | HashTable nepovoluje prvky NULL. |
| U objektů, které vložíte do HashSet, není zaručeno, že budou vloženy ve stejném pořadí. Objekty jsou vkládány na základě jejich hash kódu. LinkedHashSet lze použít k udržení pořádku. | HashTable neuchovává pořadí vložení. |
| HashSet není synchronizovaný, ale lze jej synchronizovat externě. | HashTable je synchronizovaná. |
| metoda add() se používá k vložení do HashSet | metoda put() se používá k vložení do HashTable |
28. Jaká je výchozí velikost faktoru zatížení v kolekci založené na hašování?
Jak se faktor zatížení zvyšuje, kapacita se zvyšuje, takže provozní složitost HashMap zůstává O(1), pokud poměr aktuálního prvku k počáteční kapacitě překročí práh. Význam provozní složitosti O(1) znamená, že operace vyhledávání a vkládání zabírají konstantní čas. Výchozí velikost faktoru zatížení je 0,75 . Výchozí kapacita se vypočítá vynásobením počáteční kapacity faktorem zatížení.
Více informací naleznete v článku – Load Factor v HashMap v Javě s příklady
Otázky k pohovoru Java Collection pro zkušené
29. Jaký je rozdíl mezi Comparable a Comparator v Javě?
Java poskytuje dvě rozhraní pro třídění objektů pomocí datových členů třídy:
- Srovnatelný
- Komparátor
| Srovnatelný | Komparátor |
|---|---|
| Rozhraní Comparable poskytuje jedinou sekvenci řazení. | Rozhraní komparátoru poskytuje několik třídicích sekvencí. |
| Skutečná třída je upravena srovnatelným rozhraním | Skutečná třída není upravena rozhraním komparátoru. |
| Metoda CompareTo() se používá k řazení prvků. | K řazení prvků se používá metoda Compare(). |
| Srovnatelné je přítomno v balíčku java.lang | Komparátor je obsažen v balíčku java.util |
Více informací naleznete v článku – Comparable vs Comparator v Javě
30. Jaký je rozdíl mezi fail-fast a failsafe?
Iterátory v Javě se používají k iteraci objektů Collection. Fail-Fast iterátory okamžitě hodí ConcurrentModificationException pokud existuje konstrukční úprava sbírky. Strukturální modifikace znamená přidání nebo odebrání jakéhokoli prvku z kolekce, zatímco vlákno prochází touto kolekcí. Iterator na třídách ArrayList a HashMap jsou některé příklady Iteratoru rychlého při selhání.
| Selhání-rychle | Fail-Safe |
|---|---|
| Výjimka ConcurrentModificationException je vyvolána při úpravě objektu během procesu iterace. | Není vyvolána žádná výjimka |
| Fail-Fast potřebuje během procesu méně paměti. | Iterátor zabezpečený proti selhání vyžaduje během procesu více paměti. |
| Objekt klonu není vytvořen během procesu iterace. | Během procesu iterace se vytvoří klonovaný objekt nebo kopie. |
| Fail-Fast neumožňuje úpravy během procesu iterace. | Fail-Safe umožňuje úpravy během procesu iterace. |
| Fail-Fast je rychlý, | Fail-Safe je o něco pomalejší než Fail-Safe. |
| Příklady: ArrayList, Vector, HashMap, HashSet atd. | Příklady: ConcurrentHashMap, CopyOnWriteArrayList atd. |
Více informací naleznete v článku – Iterátory rychlého selhání a bezpečné při selhání v Javě
31. Napište program pro iteraci seznamu pomocí výrazu lambda.
Iteraci lze provést pomocí a lambda výraz.
Syntax:
list_name.forEach(variable->{//blok kódu})> Jáva
// Java Program to iterate over a List> // using forEach()> > // Importing all classes of> // java.util method> import> java.util.*;> > // Class> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an ArrayList> >List l =>new> ArrayList();> > >// Adding elements to the List> >// Custom inputs> >l.add(>'Geeks'>);> >l.add(>'for'>);> >l.add(>'Geeks'>);> > >// Lambda expression printing all elements in a List> >l.forEach((temp) ->{ System.out.println(temp); });> >}> }> |
>
>Výstup
Geeks for Geeks>
Více informací naleznete v článku – Iterujte seznam v Javě
32. Co je IdentityHashMap?
IdentityHashMap implementuje rozhraní Map pomocí Hashtable, porovnávání klíčů (a hodnot) pomocí referenční rovnosti namísto rovnosti objektů. Tato třída implementuje rozhraní Map, ale záměrně porušuje obecnou smlouvu Map, která vyžaduje, aby byly objekty porovnávány pomocí metody equals(). Tato třída se používá, když uživatel umožňuje porovnávat objekty pomocí odkazů. Patří do balíčku java.util.
Více informací naleznete v článku – Třída IdentityHashMap v Javě
33. Napište program v Javě pro zobrazení obsahu HashTable pomocí výčtu.
Třída hashtable implementuje hashovací tabulku, která mapuje klíče na hodnoty. Libovolný nenull objekt lze použít jako klíč nebo jako hodnotu. Pro úspěšné ukládání a načítání objektů z hashtable musí objekty použité jako klíče implementovat metodu hashCode a metodu rovná se. Níže je uveden program pro zobrazení obsahu hashTable pomocí výčtu:
Jáva
// Java Program to Demonstrate Getting Values> // as an Enumeration of Hashtable class> > import> java.io.*;> import> java.util.Enumeration;> import> java.util.Hashtable;> > // Main class> // EnumerationOnKeys> public> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> >// Creating an empty hashtable> >Hashtable hash> >=>new> Hashtable();> > >// Inserting key-value pairs into hash table> >// using put() method> >hash.put(>1>,>'Geeks'>);> >hash.put(>2>,>'for'>);> >hash.put(>3>,>'Geeks'>);> > >// Now creating an Enumeration object> >// to read elements> >Enumeration e = hash.elements();> > >// Condition holds true till there is> >// single key remaining> > >// Printing elements of hashtable> >// using enumeration> >while> (e.hasMoreElements()) {> > >// Printing the current element> >System.out.println(e.nextElement());> >}> >}> }> |
>
>Výstup
Geeks for Geeks>
34. Napište program v jazyce Java, abyste získali pohled na kolekci hodnot přítomných v HashMap.
Třída HashMap Java má metodu java.util.HashMap.values() pro vytváření kolekcí z hodnot HashMap. V podstatě vrací pohled kolekce hodnot HashMap.
Jáva
// Java code to illustrate the values() method> import> java.util.*;> > public> class> Hash_Map_Demo {> >public> static> void> main(String[] args)> >{> > >// Creating an empty HashMap> >HashMap hash_map> >=>new> HashMap();> > >// Mapping string values to int keys> >hash_map.put(>0>,>'Welcome'>);> >hash_map.put(>1>,>'to'>);> >hash_map.put(>2>,>'Geeks'>);> >hash_map.put(>3>,>'4'>);> >hash_map.put(>4>,>'Geeks'>);> > >// Displaying the HashMap> >System.out.println(>'Initial Mappings are: '> >+ hash_map);> > >// Using values() to get the set view of values> >System.out.println(>'The collection is: '> >+ hash_map.values());> >}> }> |
>
>Výstup
Initial Mappings are: {0=Welcome, 1=to, 2=Geeks, 3=4, 4=Geeks} The collection is: [Welcome, to, Geeks, 4, Geeks]> Více informací naleznete v článku – Metoda HashMap values() v Javě
35. Napište program pro spojení dvou ArrayList do jednoho ArrayListu.
Vzhledem ke dvěma ArrayListům v Javě je naším úkolem se k těmto ArrayListům připojit.
seznam polí java
Jáva
// Java program to demonstrate> // How to join ArrayList> > import> java.util.*;> > public> class> GFG {> >public> static> void> main(String args[])> >{> > >ArrayList list_1 =>new> ArrayList();> > >list_1.add(>'Geeks'>);> >list_1.add(>'For'>);> >list_1.add(>'ForGeeks'>);> > >// Print the ArrayList 1> >System.out.println(>'ArrayList 1: '> + list_1);> > >ArrayList list_2 =>new> ArrayList();> > >list_2.add(>'GeeksForGeeks'>);> >list_2.add(>'A computer portal'>);> > >// Displaying the ArrayList 2> >System.out.println(>'ArrayList 2: '> + list_2);> > >// using Collection.addAll() method to join two> >// arraylist> >list_1.addAll(list_2);> > >// Print the joined ArrayList> >System.out.println(>'Joined ArrayLists: '> + list_1);> >}> }> |
>
>Výstup
ArrayList 1: [Geeks, For, ForGeeks] ArrayList 2: [GeeksForGeeks, A computer portal] Joined ArrayLists: [Geeks, For, ForGeeks, GeeksForGeeks, A computer portal]>
Více informací naleznete v článku – Připojte se ke dvěma ArrayListům v Javě
36. Jak můžete synchronizovat ArrayList v Javě?
Pomocí metody Collections.synchronizedList() můžeme synchronizovat naše kolekce v Javě. SynchronizedList() vrátí synchronizovaný seznam (zabezpečený pod vláknem) podporovaný výběrem.
Jáva
// Java program to show synchronization of ArrayList> import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Non Synchronized ArrayList> >List list =>new> ArrayList();> > >list.add(>'Eat'>);> >list.add(>'Coffee'>);> >list.add(>'Code'>);> >list.add(>'Sleep'>);> >list.add(>'Repeat'>);> > >// Synchronizing ArrayList in Java> >list = Collections.synchronizedList(list);> > >// we must use synchronize block to avoid> >// non-deterministic behavior> >synchronized> (list)> >{> >Iterator it = list.iterator();> >while> (it.hasNext()) {> >System.out.println(it.next());> >}> >}> >}> }> |
>
>Výstup
Eat Coffee Code Sleep Repeat>
37. Co je třída vlastností v Javě?
Třída vlastností je podtřídou Hashtable. Třída vlastností ukládá seznam hodnot, jejichž klíčem je řetězec a jejichž hodnotou je také řetězec. Vlastnosti mohou definovat další seznamy tříd vlastností, ale výchozí jsou vlastnosti.
Vlastnosti třídy Vlastnosti:
- Vlastnost je podtřídou Hashtable.
- Soubor Vlastnosti se používá k ukládání a načítání datového typu řetězce pro seznam hodnot, kde klíč je řetězec a hodnota je také řetězec.
- Pokud původní seznam vlastností neobsahuje určitou klíčovou vlastnost, bude místo toho prohledán výchozí seznam vlastností.
- Objekty mohou být sdíleny více vlákny bez externí synchronizace.
- Třídu vlastností lze použít k načtení vlastností systému.
Více informací naleznete v článku – Třída vlastností v Javě
38. Co se stane, když použijete HashMap ve vícevláknové Java aplikaci?
V prostředí s více vlákny, pokud více vláken strukturálně změní mapu, například přidáním, odebráním nebo úpravou mapování, může dojít k poškození vnitřní datové struktury HashMap a mohou zde chybět některé odkazy, nesprávné položky a samotná mapa může stát se zcela zbytečným. HashMap byste tedy neměli používat v souběžné aplikaci; místo toho použijte ConcurrentHashMap nebo Hashtable, který je bezpečný pro vlákna. ConcurrentHashMap zahrnuje všechny metody Hashtable a také plnou souběžnost vyhledávání a aktualizací.
Jak se ThreadSafeConcurrentHashMap stal bezpečným pro vlákna?
- Třída java.util.Concurrent.ConcurrentHashMap poskytuje bezpečnost vláken tím, že rozděluje mapu na segmenty, což umožňuje použití zámku pouze jednou na segment, tj. jednou pro každé vlákno.
- Operace čtení v ConcurrentHashMap nevyžaduje zámek.
Více informací naleznete v článku – Jak ConcurrentHashMap dosahuje bezpečnosti vláken v Javě?
39. Co se stane, když dva různé klíče HashMap vrátí stejný hashcode()?
Když dva různé klíče HashMap vrátí stejný hash kód, skončí ve stejném kbelíku; proto dojde ke kolizím. V případě kolize, tj. index dvou nebo více uzlů je stejný, jsou uzly spojeny seznamem odkazů, tj. na druhý uzel odkazuje první uzel a na třetí druhý uzel a tak dále.
Více informací naleznete v článku – Interní fungování HashMap v Javě
40. Co je WeakHashMap?
WeakHashMap implementuje rozhraní Map. Na rozdíl od HashMap umožňuje WeakHashMap shromažďování odpadu, i když objekt zadaný jako klíč neobsahuje žádné odkazy, přestože je s WeakHashMap spojen. Jinými slovy, Garbage Collector je lepší než WeakHashMap.
Více informací naleznete v článku – Hashmap vs WeakHashMap v Javě
41. Co je UnsupportedOperationException?
V kontextu API nebo implementací seznamů je UnsupportedOperationException běžnou výjimkou. Výjimka je vyvolána, když požadovanou operaci nelze provést. Tato třída je členem Java Collections Framework.
Syntax:
public class UnsupportedOperationException extends RuntimeException>
Více informací naleznete v článku – UnsupportedOperationException
42. Jak vytvořit kolekci pouze pro čtení v Javě?
Vytvoření kolekce pouze pro čtení zahrnuje omezení objektu pouze na načítání dat a nikoli na přidávání nebo odstraňování dat. Java má různé metody pro různé typy Collection, jako je unmodifiableCollection(), unmodifiableMap(), ununmodifiableSet() atd. java.util.Třída collections definuje všechny metody. Metoda unmodifiableCollection() vytvoří kolekci pouze pro čtení. Vyžaduje odkaz na třídu Collection. Pokud máme objekt Set Interface, můžeme použít ununmodifiableSet() aby bylo pouze pro čtení.
Více informací naleznete v článku – Jak vytvořit sbírku pouze pro čtení v Javě?
43. Rozdíl mezi PriorityQueue a TreeSet v Javě?
| PriorityQueue | TreeSet |
|---|---|
| PriorityQueue přichází v JDK 1.5. | TreeSet přichází v JDK 1.4. |
| Datová struktura používaná PriorityQueue je Queue | Datová struktura používaná TreeSet je Set. |
| Duplicitní prvky jsou povoleny. | Duplicitní prvky nejsou povoleny. |
| Kromě kořenového prvku se ostatní prvky neřídí žádným konkrétním pořadím v PriorityQueue. | V TreeSet zůstávají všechny prvky v seřazeném pořadí. |
| Pomocí PriorityQueue můžeme získat největší nebo nejmenší prvek v čase O(1). | TreeSet neposkytuje způsob, jak získat největší nebo nejmenší prvek v čase O(1), ale protože jsou v seřazeném pořadí, získá první nebo poslední prvek v čase O(1). |
Více informací naleznete v článku – Rozdíl mezi PriorityQueue a TreeSet
44. Co je to diamantový operátor v Javě?
Diamantové operátory se používají pro zjednodušení použití generik při vytváření objektů a zároveň se vyhnou nekontrolovaným varováním v programu. Když byl v Javě 7 zaveden operátor Diamond, můžeme vytvořit objekt bez uvedení obecného typu na pravé straně výrazu, jak je znázorněno níže.
Syntax:
List list = new ArrayList();>
Více informací naleznete v článku – Diamantový operátor
45. Jak TreeMap funguje v Javě?
Stromová mapa ukládá páry klíč-hodnota, ale TreeMap třídí klíče vzestupně než sestupně jako HashMap. V závislosti na použitém konstruktoru bude TreeMap řazena buď podle svých klíčů, nebo podle komparátoru. V TreeMap jsou prvky seřazeny podle červeno-černého stromu. Červeno-černý strom je samovyvažující binární vyhledávací strom, kde každý uzel má extra bit a tento bit je často interpretován jako barva (červená nebo černá). Tyto barvy se používají k zajištění toho, aby strom zůstal vyvážený během vkládání a mazání.

Struktura uzlu v Javě
Více informací naleznete v článku – Interní práce s TreeMap v Javě
46. Vyjmenujte způsoby, jak iterovat přes Mapu v Javě?
Třída HashMap poskytuje rozhraní Java Map ukládáním dat do párů (klíč, hodnota) a přístupem k nim pomocí indexu jiného typu. Pro použití této třídy je nutné importovat java.util.HashMap balíčku nebo jeho nadtřídy.
Existuje mnoho způsobů iterace přes HashMap, z nichž 5 je uvedeno níže:
- Iterujte přes HashMap EntrySet pomocí iterátorů.
- Iterujte přes HashMap KeySet pomocí Iteratoru.
- Iterujte HashMap pomocí smyčky for-each.
- Iterace přes HashMap pomocí výrazů Lambda.
- Projděte HashMap pomocí Stream API.
Více informací naleznete v článku – Jak iterovat HashMap v Javě
47. Co je CopyOnWriteArrayList v Javě?

CopyOnWriteArrayList v Javě
JDK 1.5 představil vylepšenou verzi ArrayList nazvanou CopyOnWriteArrayList, kde jsou všechny úpravy (přidat, nastavit, odebrat atd.) implementovány novou kopií. Lze jej nalézt na java.util.concurrent. Je to datová struktura vytvořená pro použití v souběžném prostředí. V prostředí založeném na vláknech je CopyOnWriteArrayList určen pro časté čtení a občasné aktualizace. CopyOnWriteArrayList je verze ArrayList bezpečná pro vlákna.
Více informací naleznete v článku – CopyOnWriteArrayList v Javě
48. Co je EnumMap v Javě?
EnumMap je implementace rozhraní mapy specifického pro typy výčtu. Třída EnumMap je členem Java Collections Framework a není synchronizována. Rozšiřuje AbstractMap a implementuje rozhraní Map v Javě. EnumMap patří do balíčku java.util.
Syntax:
veřejná třída EnumMap
rozšiřuje AbstractMap implementuje Serializable, Cloneable // K musí rozšířit Enum, což vynucuje požadavek, že klíče musí být zadaného typu výčtu.
Parametry:
- Typ klíčového objektu
- Typ objektu hodnoty

EnumMap v Javě
Více informací naleznete v článku – Třída EnumMap v Javě
49. Jak hashmap interně funguje?
HashMap funguje na principu hashování. HashMap obsahuje pole Node a Node může představovat třídu s následujícími objekty:
- int hash
- K klíč
- hodnota V
- Další uzel
Vnitřní fungování HashMap:
- Hašování
- Kbelíky
- Výpočet indexu v Hashmap
Více informací naleznete v článku – Interní práce HashMap v Javě
padesáti. Proč je iterátor v hashmap považován za rychlý?
iterátory rychlé při selhání okamžitě vyvolávají výjimky souběžných úprav, pokud se jakékoli vlákno zvenčí pokusí upravit kolekci, na které iterují. Funkce fail-fast zajišťuje, že iterátor okamžitě selže, pokud zjistí, že jakákoliv úprava kolekce povede v budoucnu k anomálnímu chování.
Selhejte rychle Funkce zajišťuje, že pokud má iterátor pocit, že úprava kolekce by kdykoli v budoucnu vedla k anomálnímu chování, okamžitě selže.
Příklad:
Jáva
// Java code to demonstrate remove> // case in Fail-fast iterators> > import> java.io.*;> import> java.util.ArrayList;> import> java.util.Iterator;> > public> class> GFG {> >public> static> void> main(String[] args)> >{> >ArrayList arr =>new> ArrayList();> >arr.add(>1>);> >arr.add(>2>);> >arr.add(>3>);> >arr.add(>4>);> >arr.add(>5>);> > >Iterator it = arr.iterator();> >while> (it.hasNext()) {> >if> (it.next() ==>2>) {> >// will not throw Exception> >it.remove();> >}> >}> > >System.out.println(arr);> > >it = arr.iterator();> >while> (it.hasNext()) {> >if> (it.next() ==>3>) {> >// will throw Exception on> >// next call of next() method> >arr.remove(>3>);> >}> >}> >}> }> |
>
>
Výstup:
[1, 3, 4, 5] Exception in thread 'main' java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at FailFastExample.main(FailFastExample.java:28)>
Závěr
Kolekce Java je důležité pochopit pro vývojáře nebo programátory Java, protože Java je široce používána v různých odvětvích. Je důležité, aby vývojáři dobře rozuměli základním konceptům Java Collections. Java je jeden z nejrozšířenějších jazyků ve špičkových firmách jako např Uber , Airbnb , Google , Netflix , Instagram , Spotify, Amazonka , atd. Abyste se dostali do těchto společností nebo jakýchkoli jiných IT společností, musíte zvládnout tyto nejčastěji kladené otázky týkající se rozhovorů s Java Collections, abyste prolomili jejich online hodnocení a technický rozhovor založený na Javě.
Pokud si chcete procvičit kódovací otázky, Sběrné programy JAVA může být užitečným zdrojem.
Otázky k rozhovorům o kolekcích Java – FAQ
1. Co jsou kolekce v otázkách rozhovoru v jazyce Java?
Kolekce v Javě je framework používaný pro ukládání a manipulaci s kolekcemi objektů.
2. Jaké jsou 4 třídy kolekce v Javě?
V Javě je mnoho kolekcí, ale z nich jsou nejpoužívanější kolekce:
- ArrayList
- Spojový seznam
- HashSet
- Zásobník
3. Může mít HashMap duplicitní klíče?
Ne, HashMap nemůže mít duplicitní klíče. Protože HashMap je jednou z kolekcí v Javě, ukládá hodnotu ve formě klíč-hodnota a každý klíč má svou vlastní hodnotu. Protože žádný klíč nemůže mít dvě hodnoty, znamená to, že v HashMap nemůžeme mít duplicitní klíče.
4. Proč pole není kolekce?
Pole není kolekce, je to všechno kvůli rozdílu ve funkčnosti mezi kolekcemi a poli, z nichž několik je zmíněno níže:
- Po deklaraci nelze velikost pole změnit
- Pole mohou obsahovat pouze prvky homogenních datových typů.
- Pole může obsahovat jak primitivní datové typy, tak objekty, zatímco v kolekcích je schopno pojmout pouze obalové objekty.