V Javě jsou otázky sběrného rozhovoru nejčastěji kladeny tazateli. Zde je seznam nejčastěji kladených otázek týkajících se rozhovorů s kolekcemi s odpověďmi.
1) Co je to Collection framework v Javě?
Collection Framework je kombinací tříd a rozhraní, které se používá k ukládání a manipulaci s daty ve formě objektů. Poskytuje různé třídy, jako je ArrayList, Vector, Stack a HashSet atd. a rozhraní jako List, Queue, Set atd. pro tento účel.
2) Jaké jsou hlavní rozdíly mezi polem a kolekcí?
Pole a kolekce jsou si poněkud podobné, pokud jde o ukládání referencí objektů a manipulaci s daty, ale v mnoha ohledech se liší. Hlavní rozdíly mezi polem a kolekcí jsou definovány níže:
- Pole mají vždy pevnou velikost, tj. uživatel nemůže zvětšovat nebo zmenšovat délku pole podle svých požadavků nebo za běhu, ale v kolekci lze velikost dynamicky měnit podle potřeby.
- Pole mohou ukládat pouze objekty homogenního nebo podobného typu, ale v kolekci lze ukládat heterogenní objekty.
- Pole nemohou poskytnout ?hotové? metody pro požadavky uživatelů, jako je třídění, vyhledávání atd., ale kolekce obsahuje hotové metody k použití.
3) Vysvětlete různá rozhraní používaná v rámci Collection?
Collection framework implementuje různá rozhraní, Collection interface a Map interface (java.util.Map) jsou nejčastěji používaná rozhraní Java Collection Framework. Seznam rozhraní Collection Framework je uveden níže:
1. Rozhraní sbírky: Kolekce (java.util.Collection) je primární rozhraní a každá kolekce musí toto rozhraní implementovat.
Syntax:
public interface Collectionextends Iterable
Kde znamená, že toto rozhraní je obecného typu
2. Rozhraní seznamu: Rozhraní List rozšiřuje rozhraní kolekce a jedná se o uspořádanou kolekci objektů. Obsahuje duplicitní prvky. Umožňuje také náhodný přístup k prvkům.
Syntax:
public interface List extends Collection
3. Nastavení rozhraní: Set (java.util.Set) rozhraní je kolekce, která nemůže obsahovat duplicitní prvky. Může obsahovat pouze zděděné metody rozhraní kolekce
Syntax:
public interface Set extends Collection
Rozhraní fronty: Rozhraní Queue (java.util.Queue) definuje datovou strukturu fronty, která ukládá prvky ve tvaru FIFO (first in first out).
Syntax:
public interface Queue extends Collection
4. Rozhraní vyřazení z fronty: je to dvojitá fronta. Umožňuje vkládání a vyjímání prvků z obou konců. Implantuje vlastnosti jak zásobníku, tak fronty, takže může provádět operace LIFO (Last in first out) stack a FIFO (first in first out) fronty.
Syntax:
public interface Dequeue extends Queue
5. Mapové rozhraní: Mapa (java.util.Map) představuje klíč a párové uložení prvků. Mapové rozhraní neimplementuje rozhraní kolekce. Může obsahovat pouze jedinečný klíč, ale může mít duplicitní prvky. Existují dvě rozhraní, která implementují mapu v jazyce Java, a to rozhraní Map a Sorted Map.
je bílkovinný tuk
4) Jaký je rozdíl mezi ArrayList a Vector?
Ne. | ArrayList | Vektor |
---|---|---|
1) | ArrayList není synchronizován. | Vektor je synchronizován. |
2) | ArrayList není starší třída. | Vector je starší třída. |
3) | ArrayList zvětší svou velikost o 50 % velikosti pole. | Vektor zvětší svou velikost zdvojnásobením velikosti pole. |
4) | ArrayList není ?thread-safe? protože to není synchronizované. | Seznam vektorů je ?bezpečný pro vlákna? protože je každá metoda synchronizována. |
5) Jaký je rozdíl mezi ArrayList a LinkedList?
Ne. | ArrayList | Spojový seznam |
---|---|---|
1) | ArrayList používá dynamické pole. | LinkedList používá dvojitě propojený seznam. |
2) | ArrayList není efektivní pro manipulaci, protože je potřeba příliš mnoho. | LinkedList je efektivní pro manipulaci. |
3) | ArrayList je lepší pro ukládání a načítání dat. | LinkedList je lepší pro manipulaci s daty. |
4) | ArrayList poskytuje náhodný přístup. | LinkedList neposkytuje náhodný přístup. |
5) | ArrayList zabírá méně paměti, protože ukládá pouze objekt | LinkedList zabírá více paměti, protože ukládá objekt i adresu tohoto objektu. |
6) Jaký je rozdíl mezi Iteratorem a ListIteratorem?
Iterator prochází prvky pouze v dopředném směru, zatímco ListIterator prochází prvky v dopředném a zpětném směru.
Ne. | Iterátor | ListIterator |
---|---|---|
1) | Iterátor prochází prvky pouze v dopředném směru. | ListIterator prochází prvky ve směru vzad i vpřed. |
2) | Iterátor lze použít v seznamech, sadách a frontách. | ListIterator lze použít pouze v seznamu. |
3) | Iterátor může provádět operaci odstranění pouze při procházení kolekce. | ListIterator může provádět ?add,? ?odstranit,? a ?nastavit? provozu při procházení sběrem. |
7) Jaký je rozdíl mezi Iterátorem a Enumerací?
Ne. | Iterátor | Výčet |
---|---|---|
1) | Iterátor může procházet staršími a nestaršími prvky. | Výčet může procházet pouze staršími prvky. |
2) | Iterátor je rychlý při selhání. | Výčet není rychlý. |
3) | Iterátor je pomalejší než Enumerace. | Enumerace je rychlejší než Iterator. |
4) | Iterátor může provádět operaci odstranění při procházení kolekce. | Výčet může provádět pouze operaci procházení kolekce. |
8) Jaký je rozdíl mezi List a Set?
Seznam a sada rozšiřují rozhraní kolekce. Mezi oběma však existují určité rozdíly, které jsou uvedeny níže.
- Seznam může obsahovat duplicitní prvky, zatímco sada obsahuje jedinečné položky.
- Seznam je uspořádaná kolekce, která udržuje objednávku vložení, zatímco sada je neuspořádaná kolekce, která neuchovává objednávku vložení.
- Rozhraní List obsahuje jednu starší třídu, kterou je třída Vector, zatímco rozhraní Set žádnou starší třídu nemá.
- Rozhraní List může povolit n počet hodnot null, zatímco rozhraní Set umožňuje pouze jednu hodnotu null.
9) Jaký je rozdíl mezi HashSet a TreeSet?
HashSet a TreeSet, obě třídy, implementují rozhraní Set. Rozdíly mezi oběma jsou uvedeny níže.
- HashSet neuchovává�žádné pořadí�zatímco TreeSet udržuje�vzestupné pořadí.
- HashSet implicitní hashovací tabulkou, zatímco TreeSet implementovaný stromovou strukturou.
- HashSet funguje rychleji než TreeSet.
- HashSet je podporován HashMap, zatímco TreeSet je podporován TreeMap.
10) Jaký je rozdíl mezi Set a Map?
Rozdíly mezi sadou a mapou jsou uvedeny níže.
ffilmy
- Sada obsahuje pouze hodnoty, zatímco Mapa obsahuje klíč i hodnoty.
- Sada obsahuje jedinečné hodnoty, zatímco Mapa může obsahovat jedinečné klíče s duplicitními hodnotami.
- Sada obsahuje jeden počet hodnot null, zatímco Map může obsahovat jeden klíč null s n počtem hodnot null.
11) Jaký je rozdíl mezi HashSet a HashMap?
Rozdíly mezi HashSet a HashMap jsou uvedeny níže.
- HashSet obsahuje pouze hodnoty, zatímco HashMap obsahuje položku (klíč, hodnotu). HashSet lze iterovat, ale HashMap se musí převést na sadu, aby mohl být iterován.
- HashSet implementuje rozhraní Set, zatímco HashMap implementuje rozhraní Map
- HashSet nemůže mít žádnou duplicitní hodnotu, zatímco HashMap může obsahovat duplicitní hodnoty s jedinečnými klíči.
- HashSet obsahuje jediné číslo hodnoty null, zatímco HashMap může obsahovat jeden klíč null s n počtem hodnot null.
12) Jaký je rozdíl mezi HashMap a TreeMap?
Rozdíly mezi HashMap a TreeMap jsou uvedeny níže.
- HashMap neudržuje žádné pořadí, ale TreeMap zachovává vzestupné pořadí.
- HashMap je implementována hashovací tabulkou, zatímco TreeMap je implementována stromovou strukturou.
- HashMap lze třídit podle klíče nebo hodnoty, zatímco TreeMap lze třídit podle klíče.
- HashMap může obsahovat klíč null s více hodnotami null, zatímco TreeMap nemůže obsahovat klíč null, ale může mít více hodnot null.
13) Jaký je rozdíl mezi HashMap a Hashtable?
Ne. | HashMap | Hashtable |
---|---|---|
1) | HashMap není synchronizován. | Hashtable je synchronizován. |
2) | HashMap může obsahovat jeden klíč null a více hodnot null. | Hashtable nemůže obsahovat žádný klíč null ani hodnotu null. |
3) | HashMap není ?thread-safe? takže je užitečný pro aplikace bez vláken. | Hashtable je bezpečný pro vlákna a lze jej sdílet mezi různými vlákny. |
4) | 4) HashMap zdědí třídu AbstractMap | Hashtable zdědí třídu Dictionary. |
14) Jaký je rozdíl mezi Collection a Collections?
Rozdíly mezi sbírkou a sbírkami jsou uvedeny níže.
- Kolekce je rozhraní, zatímco kolekce je třída.
- Rozhraní kolekce poskytuje standardní funkcionalitu datové struktury pro seznam, sadu a frontu. Třída Collections však má třídit a synchronizovat prvky kolekce.
- Rozhraní Collection poskytuje metody, které lze použít pro datovou strukturu, zatímco třída Collections poskytuje statické metody, které lze použít pro různé operace na kolekci.
15) Jaký je rozdíl mezi srovnatelným a komparátorem?
Ne. | Srovnatelný | Komparátor |
---|---|---|
1) | Porovnatelné poskytuje pouze jeden druh sekvence. | Komparátor poskytuje několik druhů sekvencí. |
2) | Poskytuje jednu metodu s názvem CompareTo(). | Poskytuje jednu metodu s názvem Compare(). |
3) | Nachází se v balíčku java.lang. | Nachází se v balíčku java.util. |
4) | Pokud implementujeme rozhraní Comparable, bude upravena skutečná třída. | Skutečná třída se nezmění. |
16) Co rozumíte pod pojmem BlockingQueue?
BlockingQueue je rozhraní, které rozšiřuje rozhraní Queue. Poskytuje souběžnost operací, jako je vyhledávání, vkládání, mazání. Při načítání jakéhokoli prvku čeká, až fronta nebude prázdná. Při ukládání prvků čeká na volné místo. BlockingQueue nemůže obsahovat prvky null a implementace BlockingQueue je bezpečná pro vlákna.
Syntax:
public interface BlockingQueue extends Queue
17) Jaká je výhoda souboru Vlastnosti?
Pokud změníte hodnotu v souboru vlastností, nemusíte znovu kompilovat třídu Java. Umožňuje tedy snadnou správu aplikace. Používá se k ukládání informací, které je třeba často měnit. Zvažte následující příklad.
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')); } }
Výstup
system oracle
18) Co znamená metoda hashCode()?
Metoda hashCode() vrací hodnotu hash kódu (celé číslo).
Metoda hashCode() vrací stejné celé číslo, pokud jsou dva klíče (voláním metody equals() identické).
Je však možné, že dvě čísla hash kódů mohou mít různé nebo stejné klíče.
Pokud dva objekty neposkytují stejný výsledek pomocí metody equals(), pak metoda hashcode() poskytne pro oba objekty různé celočíselné výsledky.
19) Proč přepisujeme metodu equals()?
Metoda rovná se používá ke kontrole, zda jsou dva objekty stejné nebo ne. Pokud chceme kontrolovat objekty na základě vlastnosti, je třeba jej přepsat.
Například zaměstnanec je třída, která má 3 datové členy: id, jméno a plat. Chceme však zkontrolovat rovnost zaměstnaneckého objektu mzdou. Potom musíme přepsat metodu equals().
20) Jak synchronizovat prvky List, Set a Map?
Ano, třída Collections poskytuje metody pro synchronizaci prvků List, Set nebo Map:
public static List synchronizedList(List l){} |
public static Set synchronizedSet(Set s){} |
public static SortedSet synchronizedSortedSet(SortedSet s){} |
veřejná statická mapa synchronizovanáMap(Map m){} |
veřejná statická SortedMap synchronizedSortedMap(SortedMap m){} |
21) Jaká je výhoda generické kolekce?
Použití generické kolekce má tři hlavní výhody.
- Pokud použijeme generickou třídu, nepotřebujeme přetypování.
- Je typově bezpečný a kontrolován v době kompilace.
- Generic potvrzuje stabilitu kódu tím, že umožňuje detekovat chyby v době kompilace.
22) Co je hash-collision v Hashtable a jak je řešena v Javě?
Dva různé klíče se stejnou hodnotou hash jsou známé jako hašovací kolize. Aby se předešlo kolizi, budou uloženy dvě samostatné položky v jediném segmentu hash. Existují dva způsoby, jak se vyhnout kolizi hash.
- Samostatné řetězení
- Otevřete Adresování
23) Co je třída Slovník?
Třída Dictionary poskytuje možnost ukládat páry klíč–hodnota.
24) Jaká je výchozí velikost faktoru zatížení v kolekci založené na hašování?
Výchozí velikost faktoru zatížení je 0,75 . Výchozí kapacita se vypočítá jako počáteční kapacita * faktor zatížení. Například 16 * 0,75 = 12. 12 je tedy výchozí kapacita mapy.
25) Co rozumíte pod pojmem fail-fast?
Iterátor v jazyce Java, který okamžitě vyvolá výjimku ConcurrentmodificationException, pokud dojde k jakékoli strukturální změně, se nazývá iterátor rychlý při selhání. Iterátor Fail-fats nevyžaduje žádné další místo v paměti.
26) Jaký je rozdíl mezi Array a ArrayList?
Hlavní rozdíly mezi Array a ArrayList jsou uvedeny níže.
SN | Pole | ArrayList |
---|---|---|
1 | Pole má pevnou velikost, což znamená, že nemůžeme velikost pole měnit podle potřeby. | ArrayList nemá pevnou velikost, kterou můžeme dynamicky měnit. |
2 | Pole jsou statického typu. | ArrayList má dynamickou velikost. |
3 | Pole mohou ukládat primitivní datové typy i objekty. | ArrayList nemůže ukládat primitivní datové typy, může ukládat pouze objekty. |
27) Jaký je rozdíl mezi délkou pole a velikostí pole ArrayList?
Délku pole lze získat pomocí vlastnosti length, zatímco ArrayList nepodporuje vlastnost length, ale můžeme použít metodu size() k získání počtu objektů v seznamu.
Zjištění délky pole
Int [] array = new int[4]; System.out.println('The size of the array is ' + array.length);
Zjištění velikosti ArrayList
ArrayList list=new ArrayList(); list.add('ankit');�� list.add('nippun'); System.out.println(list.size());
28) Jak převést ArrayList na Array a Array na ArrayList?
Pole můžeme převést na ArrayList pomocí metody asList() třídy Arrays. Metoda asList() je statická metoda třídy Arrays a přijímá objekt List. Zvažte následující syntaxi:
Arrays.asList(item)
ArrayList můžeme převést na Array pomocí metody toArray() třídy ArrayList. Pro převod ArrayList na objekt List zvažte následující syntaxi.
List_object.toArray(new�String[List_object.size()])
29) Jak udělat Java ArrayList pouze pro čtení?
Můžeme získat java ArrayList pouze pro čtení voláním metody Collections.unmodifiableCollection(). Když definujeme ArrayList jako pouze pro čtení, nemůžeme v kolekci provádět žádné úpravy pomocí metody �add(), remove() nebo set().
30) Jak odstranit duplikáty z ArrayList?
Existují dva způsoby, jak odstranit duplikáty z ArrayList.
Proces odstranění duplicitních prvků z ArrayList pomocí LinkedHashSet:
bash proměnná
- Zkopírujte všechny prvky ArrayList do LinkedHashSet.
- Vyprázdněte ArrayList pomocí metody clear(), která odstraní všechny prvky ze seznamu.
- Nyní zkopírujte všechny prvky LinkedHashset do ArrayList.
31) Jak obrátit ArrayList?
K obrácení ArrayList můžeme použít metodu reverse() třídy Collections. Zvažte následující příklad.
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()); } } }
Výstup
printing the list.... 10 50 30 printing list in reverse order.... 30 50 10
32) Jak seřadit ArrayList v sestupném pořadí?
Chcete-li seřadit ArrayList v sestupném pořadí, můžeme použít metodu reverseOrder třídy Collections. Zvažte následující příklad.
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()); } } }
Výstup
printing the list.... 10 50 30 60 20 90 printing list in descending order.... 90 60 50 30 20 10
33) Jak synchronizovat ArrayList?
ArrayList můžeme synchronizovat dvěma způsoby.
- Pomocí metody Collections.synchronizedList().
- Pomocí CopyOnWriteArrayList
3. 4) Kdy použít ArrayList a LinkedList?
LinkedLists je lepší použít pro operace aktualizace, zatímco ArrayLists je lepší použít pro operace vyhledávání.