„Java Collections“ interviu klausimai ir atsakymai
Java kolekcijos sistema buvo pristatytas JDK 1.2 kuriame yra visos kolekcijos klasės ir sąsajos. Java kolekcija yra sistema, kuri suteikia mechanizmą saugoti ir manipuliuoti objektų kolekcija. Tai leidžia kūrėjams pasiekti supakuotas duomenų struktūras ir algoritmus, skirtus manipuliuoti duomenimis.
Šiame straipsnyje apžvelgėme 50 geriausių „Java Collections“ interviu klausimai ir Atsakymai kurios apima viską nuo pagrindinių iki pažangių Java rinkinių koncepcijų, tokių kaip navigacijos rinkinys, WeakHashMap, srautai Lambdas ir kt. Nesvarbu, ar esate šviežesnis arba an patyręs Java kūrėjas , šie „Java“ kolekcijų interviu klausimai suteikia jums viso pasitikėjimo, kurio reikia kitam „Java“ interviu.
„Java Collections“ interviu klausimai
50 klausimų suskirstėme į dvi dalis: Patyrusiems ir Naujokams. Pradėkime nuo klausimų pirmakursiams.
Turinys
„Java“ kolekcijos interviu klausimai pirmakursiams
1. Kas yra kolekcija Java?
Terminas kolekcija nurodo objektų grupę, vaizduojamą kaip vienas vienetas. Klasės Java kolekcijos klasių hierarchijoje yra suskirstytos į dvi dalis šaknis sąsajos: Kolekcija (java.util.Collection) ir Žemėlapis (java.util.Map) . Sąlygos, su kuriomis susidursite mokydamiesi apie kolekciją Java:
- Kolekcijos struktūra: „Java“ kolekcijos sistema apibrėžia klases ir sąsajas, skirtas objektų grupėms pateikti kaip vieną objektą. C++ kūrėjai gali palyginti kolekcijos sistemą su STL (standartinė šablonų biblioteka) ir „Container Framework“ su rinkinio sistema, jei jie yra iš C++ fono.
- Kolekcijos sąsaja: Klasės sąsaja nurodo, ką ji turėtų daryti, o ne kaip. Kitaip tariant, tai yra klasės planas. Šioje sąsajoje pateikiami dažniausiai naudojami metodai visiems kolekcijos objektams, kurie yra kolekcijos sistemos dalis. Arba jis vaizduoja atskirą objektą kaip visumą.
- Kolekcijos klasė: „Collection Framework“ narys yra java.util paketo dalis. Kolekcijos objektas šioje klasėje turi daug naudingų metodų.
2. Kas yra „Java“ sistema?
Karkasai yra rinkiniai klases ir sąsajos kurios suteikia paruoštą architektūrą. Norint įdiegti naujas funkcijas ar klases, nebūtina apibrėžti sistemos. Dėl to optimalus į objektą orientuotas dizainas apima sistemą, kurioje yra klasių, kurios visos atlieka panašias užduotis, rinkinys. Sistema gali būti naudojama įvairiais būdais, pavyzdžiui, iškviečiant jos metodus, išplečiant ir teikiant atgalinius skambučius, klausytojus ir kitus diegimus. Kai kurios populiarios „Java“ sistemos yra:
- Pavasaris
- Užmigti
- Atramos
- „Google Web Toolkit“ (GWT)
- „JavaServer Faces“ (JSF)
3. Kuo Java skiriasi masyvas ir kolekcija?
Masyvai yra panašaus tipo kintamųjų, turinčių bendrą pavadinimą Java, rinkinys. Yra keletas skirtumų tarp „Java“ ir „C/C++“ masyvų. Kita vertus, kolekcijos yra atskirų objektų grupės, kurios sudaro vieną objektą, žinomą kaip objektų kolekcija.
| Masyvai | Kolekcija |
|---|---|
| Masyvai yra fiksuoto dydžio, tai yra, kai sukuriame masyvą, negalime padidinti ar sumažinti pagal savo reikalavimus. | Kolekcija yra auginama gamtoje ir yra pagrįsta mūsų reikalavimais. Galime padidinti arba sumažinti dydį. |
| Kalbant apie atmintį, masyvai nerekomenduojami naudoti. | Kalbant apie atmintį, rekomenduojama naudoti kolekcijas. |
| Kalbant apie našumą, rekomenduojama naudoti masyvus. | Kalbant apie našumą, kolekcijos nerekomenduojamos naudoti. |
| Masyvai gali turėti tik vienarūšių duomenų tipų elementus. | Kolekcijoje gali būti tiek vienarūšių, tiek nevienalyčių elementų. |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Skirtumas tarp masyvų ir kolekcijų Java
4. Kokios yra įvairios sąsajos, naudojamos Java Collections Framework?
Kolekcija žinoma kaip kolekcijų hierarchijos šaknis. Kolekcijos yra objektų grupės, žinomos kaip elementai. „Java“ platforma nepateikia tiesioginio šios sąsajos diegimo, tačiau „Collection“ sąsają įgyvendina „List“ ir „Set“ klasės.
- Kolekcijos sąsaja
- Sąrašo sąsaja
- Nustatykite sąsają
- Eilės sąsaja
- Ištraukimo iš eilės sąsaja
- Žemėlapio sąsaja
5. Paaiškinkite Java rinkinio sistemos hierarchiją.
Visos klasės ir sąsajos, kurių reikalauja rinkimo sistema, yra paslaugų pakete (java. util). Kolekcijos sistemos turi sąsają, vadinamą kartojama sąsaja, kuri leidžia iteratoriui kartoti visas kolekcijas. Be šios sąsajos, pagrindinė rinkinio sąsaja veikia kaip rinkimo sistemos šaknis. Visos kolekcijos išplečia šią kolekcijos sąsają ir taip praplečia iteratoriaus savybes ir šios sąsajos metodus. Toliau pateiktame paveikslėlyje parodyta kolekcijos sistemos hierarchija.
Java kolekcijos hierarchija
6. Kokie yra kolekcijos Framework privalumai?
Kolekcijos sistemos privalumai: Kadangi rinkimo sistemos nebuvimas sukėlė pirmiau minėtus trūkumus, toliau pateikiami rinkimo sistemos pranašumai.
- Nuosekli API: API turi pagrindinį sąsajų rinkinį, pvz Kolekcija , Nustatyti , Sąrašas , arba Žemėlapis , turi visos klasės (ArrayList, LinkedList, Vector ir tt), kurios įgyvendina šias sąsajas kai kurie bendras metodų rinkinys.
- Sumažina programavimo pastangas: Programuotojas neturi jaudintis dėl kolekcijos dizaino, jis gali sutelkti dėmesį į geriausią jos panaudojimą savo programoje. Todėl sėkmingai įgyvendinta pagrindinė Objektinio programavimo (t.y.) abstrakcijos koncepcija.
- Padidina programos greitį ir kokybę: Padidina našumą suteikdamas didelio našumo naudingų duomenų struktūrų ir algoritmų įgyvendinimą, nes tokiu atveju programuotojui nereikia galvoti apie geriausią konkrečios duomenų struktūros įgyvendinimą. Jis gali tiesiog panaudoti geriausią įgyvendinimą, kad drastiškai padidintų savo algoritmo / programos našumą.
7. Kas yra ArrayList Java?
„ArrayList“ yra „Java“ rinkinio sistemos dalis ir yra java.util paketo klasė. Tai suteikia mums dinaminius „Java“ masyvus. Pagrindiniai ArrayList pranašumai yra tai, kad jei deklaruojame masyvą, reikia paminėti dydį, bet ArrayList nereikia minėti ArrayList dydžio, jei norite paminėti dydį, tada galite tai padaryti.
Masyvo sąrašo vaizdas
Norėdami gauti daugiau informacijos, skaitykite straipsnį - ArrayList Java
8. Kuo skiriasi kolekcija ir kolekcijos?
| Kolekcija | Kolekcijos |
|---|---|
| Tai sąsaja. | Tai komunalinių paslaugų klasė. |
| Jis naudojamas atskirų objektų grupei pavaizduoti kaip vieną vienetą. | Jis apibrėžia kelis naudingumo metodus, kurie naudojami rinkimui atlikti. |
| Kolekcija yra sąsaja, kurioje yra statinis metodas nuo java8. Sąsajoje taip pat gali būti abstrakčių ir numatytųjų metodų. | Jame yra tik statiniai metodai. |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Kolekcija vs kolekcijos Java su pavyzdžiu
9. Kuo skiriasi ArrayList ir LinkedList Java rinkimo sistemoje?
ArrayList ir LinkedList
| ArrayList | LinkedList |
|---|---|
| Ši klasė naudoja dinaminį masyvą elementams saugoti. Įvedus bendrinius vaistus, ši klasė palaiko visų tipų objektų saugojimą. | Šioje klasėje elementams saugoti naudojamas dvigubai susietas sąrašas. Panašiai kaip ArrayList, ši klasė taip pat palaiko visų tipų objektų saugojimą. |
| Manipuliavimas „ArrayList“ užtrunka daugiau laiko dėl vidinio diegimo. Kai pašaliname elementą viduje, masyvas yra perkeliamas ir atminties bitai perkeliami. | Manipuliuoti LinkedList reikia mažiau laiko, palyginti su ArrayList, nes dvigubai susietame sąraše nėra atminties bitų perkėlimo koncepcijos. Sąrašas perkeliamas ir nuorodos nuoroda keičiama. |
| Ši klasė įgyvendina sąrašo sąsają. Todėl tai veikia kaip sąrašas. | Ši klasė įgyvendina ir sąrašo sąsają, ir Deque sąsają. Todėl jis gali veikti kaip sąrašas ir deque. |
| Ši klasė veikia geriau, kai programa reikalauja saugoti duomenis ir juos pasiekti. | Ši klasė veikia geriau, kai programai reikia manipuliuoti saugomais duomenimis. |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - ArrayList vs LinkedList Java
10. Kas yra iteratorius?
„Java“ kolekcijos sistema naudoja iteratorius, kad gautų elementus po vieną. Šis iteratorius yra universalus, nes jį galima naudoti su bet kokio tipo Kolekcijos objektu. Naudodami Iteratorių galime atlikti ir skaitymo, ir pašalinimo operacijas. Tai patobulinta Enumeration versija su pašalintais elementais.
Išvardijant elementus visose Kolekcijos sistemose įdiegtos sąsajos, pvz Nustatyti , Sąrašas , Eilė , Apie ką , ir visos įdiegtos žemėlapio klasės, turi būti naudojamas Iteratorius. Vienintelis visoje rinkinio sistemoje pasiekiamas žymeklis yra iteratorius. Naudodami iterator() metodą kolekcijos sąsajoje, galite sukurti iteratoriaus objektą.
Sintaksė:
Iterator itr = c. iterator ();
Pastaba: Čia c yra bet koks Kolekcijos objektas. itr yra Iteratoriaus sąsajos tipo ir nurodo c.
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Iteratoriai Java
11. Kuo skiriasi iteratorius ir išvardijimas?
Pagrindinis skirtumas tarp iteratoriaus ir išvardijimo yra tas, kad iteratoriai turi pašalinimo () metodą, o išvardijimai ne. Taigi, naudodami Iteratorių, galime manipuliuoti objektais pridėdami ir pašalindami juos iš kolekcijų. Kadangi surašymas gali tik kirsti objektus ir juos gauti, jis veikia kaip tik skaitoma sąsaja.
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Skirtumas tarp „Iteratoriaus“ ir „Enumeration“.
12. Kuo skiriasi sąrašas ir Set programoje Java
Pagrindinis skirtumas tarp sąrašo ir rinkinio yra tas, kad sąraše gali būti pasikartojančių elementų, o rinkinyje yra tik unikalūs elementai. Sąrašas yra užsakytas ir palaiko objekto, prie kurio jie pridedami, tvarką. Rinkinys netvarkingas.
| Sąrašas | Nustatyti |
|---|---|
| Sąrašas yra indeksuota seka. | Rinkinys yra neindeksuota seka. |
| Sąrašas leidžia pasikartojančius elementus | Rinkinys neleidžia pasikartojančių elementų. |
| Elementus galima pasiekti pagal jų padėtį. | Padėties prieiga prie elementų neleidžiama. |
| Galima saugoti kelis nulinius elementus. | Nuliniai elementai gali būti saugomi tik vieną kartą. |
| Sąrašo diegimai yra ArrayList, LinkedList, Vector, Stack | Rinkinio diegimai yra HashSet, LinkedHashSet. |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Skirtumas tarp sąrašo ir rinkinio Java
13. Kokia yra geriausia „Java Collections Framework“ praktika?
Štai keletas geriausių „Java“ kolekcijų naudojimo praktikos pavyzdžių:
- Programos turėtų būti parašytos kaip sąsajos, o ne kaip diegimas, todėl vėliau galime modifikuoti diegimą.
- Kai tik įmanoma, naudokite Generics, kad užtikrintumėte tipo saugumą ir išvengtumėte ClassCastExceptions.
- Tinkamo kolekcijos tipo pasirinkimas pagal poreikį. Pavyzdžiui, jei dydis yra fiksuotas, galime naudoti masyvą, o ne ArrayList. Kai kartojame žemėlapį, turėtume naudoti LinkedHashMap. Rinkinys yra geriausias būdas išvengti dublikatų.
- Naudokite JDK pateiktas nekintamas klases kaip raktus žemėlapyje, kad išvengtumėte hashCode() ir equals() diegimo.
- Norėdami padidinti kodo skaitomumą, turėtume naudoti isEmpty(), o ne rasti rinkinio dydį ir lyginti jį su nuliu.
- Užuot rašę savo diegimą, naudokite rinkinių paslaugų klasę, kad gautumėte tik skaitomus, sinchronizuotus arba tuščius rinkinius. Tai pagerina pakartotinį kodo naudojimą ir užtikrina didesnį stabilumą.
14. Kas yra prioritetinė eilė Java?
PriorityQueues naudojamos apdoroti objektus pagal jų prioritetą. Eilės vadovaujasi „First-In-First-Out“ algoritmu, tačiau kartais eilės elementus reikia apdoroti pagal jų prioritetą, todėl pradeda veikti „PriorityQueue“. Prioritetinės eilės yra pagrįstos prioritetų krūvomis.
Prioritetinės eilės elementai užsakomi pagal natūralų eilės tvarką arba eilės sudarymo metu pateiktą Palygintuvą, priklausomai nuo to, koks konstruktorius naudojamas.
„Java“ prioritetinės eilės
Deklaracija:
public class PriorityQueue extends AbstractQueue implements Serializable where E is the type of elements held in this queue
Klasė įgyvendina Serializable, Iterable, Collection ir Queue sąsajas.
15. Kuo java skiriasi sąrašas, rinkinys ir žemėlapis?
| Sąrašas | Nustatyti | Žemėlapis |
|---|---|---|
| Sąrašo sąsaja leidžia pasikartojančius elementus | Rinkinys neleidžia pasikartojančių elementų. | Žemėlapis neleidžia pasikartojančių elementų |
| Sąraše palaikoma įterpimo tvarka. | Rinkinys nepalaiko jokios įterpimo tvarkos. | Žemėlapyje taip pat nėra jokios įterpimo tvarkos. |
| Galime pridėti bet kokį nulinių reikšmių skaičių. | Tačiau rinkinyje beveik tik viena nulinė reikšmė. | Žemėlapyje leidžiama naudoti daugiausia vieną nulinį raktą ir bet kokį nulinių reikšmių skaičių. |
| Sąrašo diegimo klasės yra Array List ir LinkedList. | Rinkinio diegimo klasės yra HashSet, LinkedHashSet ir TreeSet. | Žemėlapio diegimo klasės yra HashMap, HashTable, TreeMap, ConcurrentHashMap ir LinkedHashMap. |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Skirtumas tarp sąrašo, rinkinio ir žemėlapio „Java“.
16. Kuo skiriasi „Queue“ ir „Stack“?
| Stack | Eilė |
|---|---|
| Stacks veikia LIFO principu, o tai reiškia, kad elementas, įdėtas paskutinis, bus pirmasis, kuris bus pašalintas. | Eilės veikia FIFO principu, o tai reiškia, kad pirmas įterptas elementas bus pirmasis, kuris bus pašalintas. |
| Į krūvas įterpimas ir trynimas vyksta tik iš viršaus. | Eilėse įterpimas atliekamas sąrašo gale, o ištrynimas atliekamas sąrašo priekyje. |
| Įterpimo operacija vadinama stūmimo operacija. | Įterpimo operacija vadinama eilės operacija. |
| Ištrynimo operacija vadinama pop operacija. | Ištrynimo operacija vadinama ištraukimo eilės operacija. |
| Krūvos viršus visada nurodo paskutinį sąrašo elementą, kuris yra vienintelis sąrašui pasiekti naudojamas rodyklė. | Prieigai prie eilių išlaikomos dvi rodyklės. Priekinis rodyklė nukreipia į pirmą įterptą elementą, o galinė – į paskutinį įterptą elementą. |
17. Kas yra BlockingQueue Java?
„Java“ „BlockingQueue“ sąsaja yra įtraukta į „Java 1.5“ kartu su įvairiomis kitomis tuo pačiu metu veikiančiomis paslaugų klasėmis, tokiomis kaip „ConcurrentHashMap“, „Counting Semaphore“, „CopyOnWriteArrrayList“ ir kt. „BlockingQueue“ sąsaja palaiko srauto valdymą (be eilės), įvedant blokavimą, jei „BlockingQueu“ pilna arba tuščia.
Gija, bandanti įtraukti elementą į eilę pilnoje eilėje, blokuojama tol, kol kuri nors kita gija nepalieka vietos eilėje, pašalinant vieną ar daugiau elementų arba visiškai išvalant eilę. Panašiai jis blokuoja giją, bandančią ištrinti iš tuščios eilės, kol kai kurios kitos gijos įterpia elementą. BlockingQueue nepriima nulinės reikšmės. Jei bandome įtraukti į eilę nulinį elementą, jis išmeta NullPointerException.
BlockingQueue naudojimas
Blokavimo eilė Java
Blokavimo eilės hierarchija
„Java“ blokavimo eilės hierarchija
Deklaracija:
public interface BlockingQueue extends Queue
Čia IR yra kolekcijoje saugomų elementų tipas.
Norėdami gauti daugiau informacijos, skaitykite straipsnį - BlockingQueue sąsaja Java
18. Kas yra maišos kodas()?
Vaizdas, rodantis „Java“ maišos kodą
HashCode() metodas grąžina maišos kodo reikšmę kaip sveikąjį skaičių. Jis apibrėžiamas Java Object klasėje, kuri apskaičiuoja nurodytų įvesties objektų maišos reikšmes. Maišos kodo reikšmė dažniausiai naudojama maišos kolekcijose, pvz., HashMap, HashSet, HashTable….. ir kt. Šis metodas turi būti nepaisomas kiekvienoje klasėje, kuri nepaiso vienodo () metodo.
Sintaksė:
public int hashCode() // This method returns the hash code value // for the object on which this method is invoked.
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Equals() ir hashCode() metodai Java
19. Java kolekcijos sistemoje atskirkite ArrayList ir Vector.
Kolekciniuose interviu šis klausimas dažnai užduodamas; Tačiau „Vector“ yra sinchronizuotas, o „ArrayList“ ne. „ArrayList“ yra greitesnis nei „Vector“. Jei reikia, „ArrayList“ masyvo dydis padidinamas 50%, o „Vector“ talpa padvigubinama, kai reikia.
Masyvo sąrašas vs vektorius java
| ArrayList | Vektorius |
|---|---|
| ArrayList nėra sinchronizuotas | Vektorius yra sinchronizuotas. |
| ArrayList dydis padidinamas iki 50% dabartinio masyvo dydžio, jei elementų skaičius viršija jo talpą. | ArrayList dydis padidinamas iki 100% dabartinio masyvo dydžio, jei elementų skaičius viršija jo talpą. |
| „ArrayList“ yra greitas, nes jis nėra sinchronizuotas. | Vektorius yra lėtesnis, nes yra sinchronizuotas. |
| Iteratoriaus sąsaja naudojama elementams pereiti | Iteratoriaus sąsaja arba išvardijimas gali būti naudojamas vektoriui pereiti. |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Vector vs ArrayList Java
20. Atskirkite Iterator ir ListIterator.
| Iteratorius | ListIterator |
|---|---|
| Gali važiuoti kolekcijoje esančiais elementais tik į priekį. | Gali kirsti kolekcijoje esančius elementus tiek pirmyn, tiek atgal. |
| Padeda pereiti žemėlapį, sąrašą ir rinkinį. | Gali pereiti tik sąrašą, o ne kitus du. |
| Indeksų negalima gauti naudojant „Iterator“. | Jis turi tokius metodus kaip nextIndex() ir previousIndex(), kad bet kuriuo metu einant per sąrašą gautų elementų indeksus. |
| Negalima keisti ar pakeisti kolekcijoje esančių elementų | Elementus galime modifikuoti arba pakeisti naudodami rinkinį (E e) |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Skirtumas tarp Iteratoriaus ir ListIteratoriaus
21. Kuo skiriasi iteratorius ir išvardijimas?
Iteratorius: Tai universalus iteratorius, kurį galime pritaikyti bet kuriam kolekcijos objektui. Naudodami Iteratorių galime atlikti tiek skaitymo, tiek pašalinimo operacijas.
Sintaksė:
// Here 'c' is any Collection object. itr is of // type Iterator interface and refers to 'c' Iterator itr = c.iterator();
Sąrašas: Sąrašas (arba enum) yra vartotojo apibrėžtas duomenų tipas. Jis daugiausia naudojamas pavadinimams priskirti integralinėms konstantoms, pavadinimai leidžia lengvai skaityti ir prižiūrėti programą.
Sintaksė:
// A simple enum example where enum is declared // outside any class (Note enum keyword instead of // class keyword) enum Color { RED, GREEN, BLUE; } | Iteratorius | Surašymas |
|---|---|
| Iteratorius yra universalus žymeklis, kuris taikomas visoms kolekcijų klasėms. | Sąrašas nėra universalus žymeklis, nes jis taikomas tik senoms klasėms. |
| Iteratorius turi pašalinimo () metodą. | Sąrašas neturi pašalinimo () metodo. |
| Iteratorius gali atlikti pakeitimus (pvz., naudodamas pašalinimo () metodą, kuris pašalina elementą iš kolekcijos perėjimo metu). | Surašymo sąsaja veikia kaip tik skaitoma sąsaja, einant per kolekcijos elementus negalima daryti jokių kolekcijos modifikacijų. |
| Iteratorius nėra sena sąsaja. Iteratorius gali būti naudojamas HashMap, LinkedList, ArrayList, HashSet, TreeMap ir TreeSet perėjimui. | Enumeration yra pasenusi sąsaja, kuri naudojama vektoriui ir maišos lentelėms pereiti. |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Skirtumas tarp „Iteratoriaus“ ir „Enumeration“.
22. Kokios yra Java Hashmap savybės?
„HashMap“ yra panašus į „HashTable“, tačiau yra nesinchronizuotas. Tai leidžia mums saugoti ir nulinius raktus, tačiau turi būti tik vienas nulinio rakto objektas ir gali būti bet koks nulinių reikšmių skaičius. Ši klasė nesuteikia garantijų dėl žemėlapio eiliškumo. Norėdami naudoti šią klasę ir jos metodus, turite importuoti java.util. HashMap paketą arba jo superklasę.
HashMap Java
Sintaksė:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
Parametrai: Tam reikalingi du parametrai, būtent taip:
- Šiame žemėlapyje saugomų raktų tipas (K)
- Susietų verčių tipas (V)
Norėdami gauti daugiau informacijos, skaitykite straipsnį - HashMap Java su pavyzdžiais
23. Kas yra surinkimo sąsajos?
The Kolekcija sąsaja yra „Java Collections Framework“ narys. Tai yra dalis java.util paketą. Tai viena iš pagrindinių kolekcijos hierarchijos sąsajų. Kolekcijos sąsaja nėra tiesiogiai įdiegta jokioje klasėje. Tačiau jis įgyvendinamas netiesiogiai per jo potipius arba antrines sąsajas, tokias kaip sąrašas, eilė ir rinkinys.
Pavyzdžiui, HashSet klasė įgyvendina Set sąsają, kuri yra kolekcijos sąsajos antrinė sąsaja. Jei rinkinio diegimas neįgyvendina tam tikros operacijos, jis turėtų apibrėžti atitinkamą metodą UnsupportedOperationException.
Kolekcijos hierarchija:
Kolekcijos sąsaja Java
24. Paaiškinkite sąrašo sąsają.
„Java“ klasės sąsaja
Java programoje Sąrašo sąsaja leidžia vartotojui saugoti užsakytą objektų kolekciją. Sąrašas yra antrinė Kolekcijos sąsaja. Kolekcijoje sąrašas yra sutvarkytas objektų, kurių reikšmės gali pasikartojančios, rinkinys. Kadangi sąrašas išsaugo įterpimo tvarką, jis leidžia pasiekti ir įterpti vietą, o tai taip pat leidžia pasikartojančias vertes.
Sintaksė:
public interface List extends Collection ;
Šią sąrašo sąsają įgyvendina įvairios klasės, tokios kaip ArrayList, Vector, Stack ir kt. Kadangi visi poklasiai įgyvendina sąrašą, sąrašo objektą galime sukurti bet kuria iš šių klasių.
Pavyzdys:
Sąrašas al = naujas ArrayList ();
Sąrašas ll = naujas LinkedList ();
Sąrašas v = naujas vektorius ();Kur T yra objekto tipas
Masyvo sąrašas Java
Sąrašo sąsają įgyvendinančios klasės yra šios:
- ArrayList
- LinkedList
- Vektorius
- Stack
25. Parašykite programą, kuri duotą masyvą paverstų rinkiniu asList() metodu.
Norėdami konvertuoti masyvo duomenis į rinkinį, galime naudoti java.util.Arrays klasė. Ši klasė suteikia statinį metodą asList(T… a), kuris paverčia masyvą į kolekciją.
Java
// 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);> > }> }> |
Išvestis
Array input: [Kamlesh, Abhay, Abhishek, Shivansh] Converted elements: [Kamlesh, Abhay, Abhishek, Shivansh]
26. Atskirkite HashSet ir HashMap
| HashSet | HashMap |
|---|---|
| „HashSet“ įgyvendina „Set“ sąsają | HashMap įgyvendina žemėlapio sąsają |
| Jokių dublikatų neleidžiama | Taip reikšmių dublikatai leidžiami, bet rakto dublikatai neleidžiami |
| „HashSet“ leidžiamos netikros vertės. | „HashMap“ neleidžiamos jokios fiktyvios reikšmės. |
| Atliekant pridėjimo operaciją reikalingas vienas objektas | Atliekant pridėjimo operaciją, reikalingi 2 objektai |
| Greitis yra palyginti lėtesnis nei HashMap | Greitis yra palyginti greitesnis nei HashSet, nes čia buvo naudojama maišos technika. |
| Turėkite vieną nulinę reikšmę | Vienas nulinis raktas ir bet koks nulinių reikšmių skaičius |
| Įterpimui naudojamas metodas Add(). | Įterpimui naudojamas put () metodas. |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Skirtumas tarp HashMap ir HashSet
27. Atskirkite HashSet ir HashTable.
| HashSet | HashTable |
|---|---|
| „HashSet“ leidžia naudoti NULL elementus | HashTable neleidžia NULL elementų. |
| Negarantuojama, kad objektai, kuriuos įterpiate į HashSet, bus įterpti ta pačia tvarka. Objektai įterpiami pagal jų maišos kodą. LinkedHashSet gali būti naudojamas tvarkai palaikyti. | HashTable nepalaiko įterpimo tvarkos. |
| „HashSet“ nėra sinchronizuotas, tačiau jį galima sinchronizuoti išoriškai. | HashTable yra sinchronizuota. |
| add() metodas naudojamas įterpti į HashSet | Put() metodas naudojamas įterpti į HashTable |
28. Koks yra numatytasis maišos pagrįsto rinkinio apkrovos koeficiento dydis?
Didėjant apkrovos koeficientui, talpa didėja taip, kad HashMap veikimo sudėtingumas išlieka O(1), jei dabartinio elemento ir pradinės talpos santykis peržengia slenkstį. O(1) operatyvinio sudėtingumo reikšmė reiškia, kad paieškos ir įterpimo operacijos trunka pastoviai. Numatytasis apkrovos koeficiento dydis yra 0,75 . Numatytoji talpa apskaičiuojama pradinę talpą padauginus iš apkrovos koeficiento.
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Apkrovos koeficientas „HashMap“ programoje „Java“ su pavyzdžiais
„Java“ kolekcijos interviu klausimai patyrusiems
29. Kuo skiriasi „Comparable“ ir „Comparator“ programoje „Java“?
„Java“ suteikia dvi sąsajas objektams rūšiuoti naudojant klasės duomenų narius:
- Palyginamas
- Palyginimas
| Palyginamas | Palyginimas |
|---|---|
| Palyginamoji sąsaja suteikia vieną rūšiavimo seką. | Komparatoriaus sąsajoje pateikiamos kelios rūšiavimo sekos. |
| Tikroji klasė modifikuojama panašia sąsaja | Tikroji klasė nėra pakeista palyginimo sąsaja. |
| Elementams rūšiuoti naudojamas palygintiTo() metodas. | Elementams rūšiuoti naudojamas palyginti() metodas. |
| Palyginamasis yra pakete java.lang | Palyginimas yra pakete java.util |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - „Comparable vs Comparator“ programoje „Java“.
30. Kuo skiriasi greitas ir saugus?
„Java“ iteratoriai naudojami kolekcijos objektams kartoti. Fail-Fast iteratoriai iš karto meta ConcurrentModificationException jei yra a struktūrinis modifikavimas kolekcijos. Struktūrinis modifikavimas reiškia bet kurio elemento pridėjimą arba pašalinimą iš kolekcijos, kol gija kartojasi per tą rinkinį. „Iterator“ „ArrayList“ ir „HashMap“ klasėse yra keli greito „Iterator“ pavyzdžiai.
| Fail-Fast | Nesaugus |
|---|---|
| ConcurrentModificationException yra metamas keičiant objektą iteracijos proceso metu. | Jokia išimtis nemeta |
| Fail-Fast proceso metu reikalauja mažiau atminties. | Saugus iteratorius proceso metu reikalauja daugiau atminties. |
| Iteracijos proceso metu klono objektas nesukuriamas. | Iteracijos proceso metu sukuriamas klono objektas arba kopija. |
| Fail-Fast neleidžia modifikuoti iteracijos proceso metu. | Fail-Safe leidžia modifikuoti iteracijos proceso metu. |
| Fail-Fast yra greitas, | „Fail-Safe“ veikia šiek tiek lėčiau nei greitai. |
| Pavyzdžiai: ArrayList, Vector, HashMap, HashSet ir kt. | Pavyzdžiai: ConcurrentHashMap, CopyOnWriteArrayList ir kt. |
Norėdami gauti daugiau informacijos, skaitykite straipsnį - Fail Fast ir Fail Safe Iterators Java
31. Parašykite programą, kuri kartotų sąrašą naudodami lambda išraišką.
Iteracija gali būti atliekama naudojant a lambda išraiška.
Sintaksė:
list_name.forEach(variable->{//block of code}) Java
// 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); });>> |