Java-kokoelmat haastattelukysymykset ja vastaukset
Java Collection Framework esiteltiin vuonna JDK 1.2 joka sisältää kaikki kokoelmaluokat ja rajapinnat. Java-kokoelma on kehys, joka tarjoaa mekanismin objektien kokoelman tallentamiseen ja käsittelemiseen. Sen avulla kehittäjät voivat käyttää valmiiksi pakattuja tietorakenteita ja algoritmeja tietojen käsittelyä varten.
Tässä artikkelissa olemme käsitelleet 50 parasta Java-kokoelmien haastattelukysymykset ja vastaukset jotka kattavat kaiken perustason Java-kokoelmakonsepteista edistyneisiin Java-kokoelmakonsepteihin, kuten navigointikokoelmaan, WeakHashMapiin, striimiin Lambdaan jne. Olitpa sitten tuoreempi tai an kokenut Java-kehittäjä , nämä Java Collections -haastattelukysymykset antavat sinulle kaiken varmuuden, jota tarvitset seuraavaan Java-haastatteluun.
Java-kokoelmien haastattelukysymykset
Olemme jakaneet 50 kysymystä kahteen osaan: Kokeneet ja Freshers. Aloitetaan Freshersin kysymyksillä.
Sisällysluettelo
Java-kokoelman haastattelukysymyksiä fuksilaisille
1. Mikä on kokoelma Javassa?
Termi kokoelma viittaa objektiryhmään, joka on esitetty yhtenä yksikkönä. Java-kokoelman luokkahierarkian luokat on jaettu kahteen osaan juuri käyttöliittymät: Kokoelma (java.util.Collection) ja kartta (java.util.Map) . Termit, joita kohtaat oppiessasi kokoelmasta Java:
- Kokoelmakehys: Java's Collection Framework määrittelee luokat ja rajapinnat objektiryhmien esittämiseksi yhtenä kokonaisuutena. C++-kehittäjät voivat verrata Collection-kehystä STL (Standard Template Library) ja Container Framework Collection Frameworkin kanssa, jos ne tulevat C++-taustasta.
- Kokoelman käyttöliittymä: Luokan käyttöliittymä määrittää, mitä sen pitäisi tehdä, ei miten. Toisin sanoen se on luokan suunnitelma. Tämä käyttöliittymä tarjoaa yleisimmät menetelmät kaikille Collection Frameworkiin kuuluville kokoelmaobjekteille. Vaihtoehtoisesti se edustaa yksittäistä kohdetta kokonaisuutena.
- Kokoelmaluokka: Collection Frameworkin jäsen, se on osa java.util-pakettia. Keräysobjekti sisältää monia apumenetelmiä tässä luokassa.
2. Mikä on kehys Javassa?
Kehykset ovat joukkoja luokat ja käyttöliittymät jotka tarjoavat valmiin arkkitehtuurin. Kehystä ei tarvitse määritellä uusien ominaisuuksien tai luokkien toteuttamiseksi. Tämän seurauksena optimaalinen oliopohjainen suunnittelu sisältää kehyksen, joka sisältää joukon luokkia, jotka kaikki suorittavat samanlaisia tehtäviä. Kehystä voidaan käyttää useilla tavoilla, kuten kutsumalla sen menetelmiä, laajentamalla sitä ja toimittamalla takaisinkutsut, kuuntelijat ja muut toteutukset. Jotkut suosituimmista javan kehyksistä ovat:
- kevät
- Lepotila
- Tuet
- Google Web Toolkit (GWT)
- JavaServer Faces (JSF)
3. Mitä eroa on Arraylla ja Collectionilla Javassa?
Taulukot ovat kokoelma samantyyppisiä muuttujia, joilla on yhteinen nimi Javassa. Java- ja C/C++-taulukoiden välillä on joitain eroja. Toisaalta kokoelmat ovat yksittäisten objektien ryhmiä, jotka muodostavat yhden kokonaisuuden, joka tunnetaan objektien kokoelmana.
| Taulukot | Kokoelma |
|---|---|
| Taulukot ovat kooltaan kiinteät, joten kun luomme taulukon, emme voi lisätä tai pienentää tarpeidemme perusteella. | Kokoelma on luonteeltaan kasvatettava ja perustuu tarpeisiimme. Voimme suurentaa tai pienentää kokoa. |
| Muistin osalta taulukoita ei suositella käytettäväksi. | Muistin osalta kokoelmia suositellaan käytettäväksi. |
| Suorituskyvyn suhteen taulukoita suositellaan käytettäväksi. | Suorituskyvyn osalta kokoelmia ei suositella käytettäväksi. |
| Taulukot voivat sisältää vain homogeenisia tietotyyppejä. | Kokoelmassa voi olla sekä homogeenisia että heterogeenisiä elementtejä. |
Lisätietoja saat artikkelista - Ero taulukoiden ja kokoelmien välillä Javassa
4. Mitä erilaisia käyttöliittymiä käytetään Java Collections Frameworkissa?
Kokoelma tunnetaan kokoelmahierarkian juurena. Kokoelmat edustavat elementeinä tunnettuja objektiryhmiä. Java-alusta ei tarjoa suoraa toteutusta tälle rajapinnalle, mutta Collection-rajapinta on toteutettu List- ja Set-luokilla.
- Kokoelman käyttöliittymä
- Lista käyttöliittymä
- Aseta käyttöliittymä
- Jonon käyttöliittymä
- Poista jonosta käyttöliittymä
- Karttakäyttöliittymä
5. Selitä Javan Collection-kehyksen hierarkia.
Kaikki kokoelmakehyksen vaatimat luokat ja rajapinnat sisältyvät apuohjelmaan (java. util). Kokoelmakehyksessä on käyttöliittymä, jota kutsutaan iteroitavaksi käyttöliittymäksi, jonka avulla iteraattori voi iteroida kaikkia kokoelmia. Tämän käyttöliittymän lisäksi pääkokoelmarajapinta toimii kokoelmakehyksen juurina. Kaikki kokoelmat laajentavat tätä kokoelmarajapintaa laajentaen siten iteraattorin ominaisuuksia ja tämän rajapinnan menetelmiä. Seuraava kuva havainnollistaa kokoelmakehyksen hierarkiaa.
Java-kokoelmahierarkia
6. Mitkä ovat kokoelman Frameworkin edut?
Kokoelmakehyksen edut: Koska keräyskehyksen puuttuminen aiheutti edellä mainitut haitat, seuraavat ovat keräyskehyksen edut.
- Johdonmukainen API: API:lla on perusjoukko rajapintoja, kuten Kokoelma , Aseta , Lista , tai Kartta , kaikilla luokilla (ArrayList, LinkedList, Vector jne), jotka toteuttavat nämä rajapinnat, on jonkin verran yhteinen menetelmäsarja.
- Vähentää ohjelmointityötä: Ohjelmoijan ei tarvitse huolehtia kokoelman suunnittelusta, vaan hän voi keskittyä sen parhaaseen käyttöön ohjelmassaan. Siksi olio-ohjelmoinnin (eli abstraktion) peruskonsepti on onnistuneesti toteutettu.
- Lisää ohjelman nopeutta ja laatua: Lisää suorituskykyä tarjoamalla tehokkaita toteutuksia hyödyllisistä tietorakenteista ja algoritmeista, koska tässä tapauksessa ohjelmoijan ei tarvitse ajatella tietyn tietorakenteen parasta toteutusta. Hän voi yksinkertaisesti käyttää parasta toteutusta parantaakseen merkittävästi algoritminsa/ohjelmansa suorituskykyä.
7. Mikä on ArrayList Javassa?
ArrayList on osa Java-kokoelmakehystä ja se on java.util-paketin luokka. Se tarjoaa meille dynaamisia taulukoita Javassa. ArrayListin tärkeimmät edut ovat, että jos ilmoitamme taulukon, sen koko on mainittava, mutta ArrayListissä ei tarvitse mainita ArrayListin kokoa, jos haluat mainita koon, niin voit tehdä sen.
Kuva Array Listista
Lisätietoja saat artikkelista - ArrayList Javassa
8. Mitä eroa on kokoelmalla ja kokoelmalla?
| Kokoelma | Kokoelmat |
|---|---|
| Se on käyttöliittymä. | Se on hyödyllisyysluokka. |
| Sitä käytetään edustamaan yksittäisten objektien ryhmä yhtenä yksikkönä. | Se määrittelee useita apumenetelmiä, joita käytetään keräämiseen. |
| Kokoelma on käyttöliittymä, joka sisältää staattisen menetelmän java8: sta lähtien. Käyttöliittymä voi sisältää myös abstrakteja ja oletusmenetelmiä. | Se sisältää vain staattisia menetelmiä. |
Lisätietoja saat artikkelista - Kokoelma vs kokoelmat Javassa esimerkin avulla
9. Ero ArrayListin ja LinkedListin välillä Java-kokoelmakehyksessä?
ArrayList ja LinkedList
| ArrayList | LinkedList |
|---|---|
| Tämä luokka käyttää dynaamista taulukkoa elementtien tallentamiseen. Geneeristen tuotteiden käyttöönoton myötä tämä luokka tukee kaikentyyppisten objektien tallennusta. | Tämä luokka käyttää kaksoislinkitettyä luetteloa elementtien tallentamiseen siihen. Samoin kuin ArrayList, tämä luokka tukee myös kaikentyyppisten objektien tallennusta. |
| ArrayListin käsittely vie enemmän aikaa sisäisen toteutuksen vuoksi. Aina kun poistamme elementin, taulukon läpi kuljetaan sisäisesti ja muistibittejä siirretään. | LinkedListin manipulointi vie vähemmän aikaa verrattuna ArrayListiin, koska kaksoislinkitetyssä luettelossa ei ole käsitystä muistibittien siirtämisestä. Lista on selattu ja viitelinkki muutettu. |
| Tämä luokka toteuttaa List-rajapinnan. Siksi tämä toimii luettelona. | Tämä luokka toteuttaa sekä List-rajapinnan että Deque-rajapinnan. Siksi se voi toimia luettelona ja dequena. |
| Tämä luokka toimii paremmin, kun sovellus vaatii tietojen tallentamista ja niiden käyttöä. | Tämä luokka toimii paremmin, kun sovellus vaatii tallennettujen tietojen käsittelyä. |
Lisätietoja saat artikkelista - ArrayList vs LinkedList Javassa
10. Mikä on iteraattori?
Java's Collection -kehys käyttää iteraattoreita elementtien hakemiseen yksitellen. Tämä iteraattori on universaali, koska sitä voidaan käyttää minkä tahansa tyyppisten kokoelmaobjektien kanssa. Iteratorin avulla voimme suorittaa sekä luku- että poistotoimintoja. Tämä on parannettu versio Enumerationista, johon on lisätty poistoelementtejä.
Luetteloitaessa elementtejä kaikissa Collection-kehyksessä toteutettuja rajapintoja, kuten Aseta , Lista , Jonottaa , Mistä , ja kaikki toteutetut Map-luokat, Iteraattoria on käytettävä. Ainoa koko kokoelmakehykselle käytettävissä oleva kohdistin on iteraattori. Voit luoda iteraattoriobjektin Collection-liittymän iterator()-menetelmällä.
Syntaksi:
Iterator itr = c. iterator ();
Huomautus: Tässä c on mikä tahansa kokoelmaobjekti. itr on tyyppiä Iterator-liitäntä ja viittaa c.
Lisätietoja saat artikkelista - Iteraattorit Javassa
11. Mitä eroa on iteraattorilla ja luettelolla?
Suurin ero iteraattorin ja numeroinnin välillä on se, että iteraattoreissa on Remove()-menetelmä, kun taas luettelointien ei ole. Siten Iteratorin avulla voimme manipuloida objekteja lisäämällä ja poistamalla niitä kokoelmista. Koska luettelointi voi vain kulkea objektien läpi ja hakea ne, se toimii kuin vain luku -käyttöliittymä.
Lisätietoja saat artikkelista - Ero Iteratorin ja Enumeration välillä
12. Mitä eroa on Luettelon ja Setin välillä Javassa?
Suurin ero luettelon ja joukon välillä on, että luettelo voi sisältää päällekkäisiä elementtejä, kun taas joukko sisältää vain yksilöllisiä elementtejä. Lista on Järjestetty ja säilyttää sen objektin järjestyksen, johon ne on lisätty. Sarja on tilaamaton.
| Lista | Aseta |
|---|---|
| Lista on indeksoitu sekvenssi. | Joukko on indeksoimaton sarja. |
| Luettelo sallii päällekkäiset elementit | Sarja ei salli päällekkäisiä elementtejä. |
| Elementit niiden sijainnin mukaan ovat käytettävissä. | Elementtien sijainti ei ole sallittua. |
| Useita nollaelementtejä voidaan tallentaa. | Nollaelementit voidaan tallentaa vain kerran. |
| Listatoteutukset ovat ArrayList, LinkedList, Vector, Stack | Joukkototeutukset ovat HashSet, LinkedHashSet. |
Lisätietoja saat artikkelista - Ero luettelon ja joukon välillä Javassa
13. Mitkä ovat Java Collections Frameworkin parhaat käytännöt?
Seuraavassa on joitain parhaita käytäntöjä Java-kokoelmien käytössä:
- Ohjelmat tulee kirjoittaa rajapinnoiksi, ei toteutuksiksi, jotta voimme muokata toteutusta myöhemmin.
- Aina kun mahdollista, käytä Genericsiä varmistaaksesi tyyppiturvallisuuden ja välttääksesi ClassCastExceptions.
- Sopivan kokoelmatyypin valinta tarpeen mukaan. Jos koko on esimerkiksi kiinteä, saatamme haluta käyttää Arraya ArrayListin päällä. Kun iteroitamme kartan yli, meidän tulisi käyttää LinkedHashMapia. Sarja on paras tapa välttää päällekkäisyyksiä.
- Käytä JDK:n tarjoamia muuttumattomia luokkia avaimina Mapissa välttääksesi hashCode()- ja equals()-koodeja.
- Koodin luettavuuden parantamiseksi meidän tulisi käyttää isEmpty():tä sen sijaan, että etsisimme kokoelman kokoa ja vertaamme sitä nollaan.
- Oman toteutuksen kirjoittamisen sijaan käytä Kokoelmat-apuluokkaa saadaksesi vain luku -, synkronoituja tai tyhjiä kokoelmia. Se parantaa koodin uudelleenkäyttöä ja parantaa samalla vakautta.
14. Mikä on prioriteettijono Javassa?
PriorityQueueita käytetään kohteiden käsittelemiseen niiden prioriteetin mukaan. Jonot noudattavat First-In-First-Out-algoritmia, mutta joskus jonon elementit on käsiteltävä niiden prioriteetin mukaan, jolloin PriorityQueue tulee peliin. Prioriteettijonot perustuvat prioriteettikasoihin.
Prioriteettijonon elementit järjestetään luonnollisen järjestyksen mukaan tai jonon rakennusaikana toimitetulla Comparatorilla riippuen siitä, kumpaa rakentajaa käytetään.
Prioriteettijonot Javassa
Ilmoitus:
public class PriorityQueue extends AbstractQueue implements Serializable where E is the type of elements held in this queue
Luokka toteuttaa Serialisable-, Iterable-, Collection- ja Queue-rajapintoja.
15. Mitä eroa on listalla, joukolla ja kartalla javassa?
| Lista | Aseta | Kartta |
|---|---|---|
| Luettelon käyttöliittymä sallii päällekkäiset elementit | Sarja ei salli päällekkäisiä elementtejä. | Kartta ei salli päällekkäisiä elementtejä |
| Lista säilyttää lisäysjärjestyksen. | Sarja ei ylläpidä lisäysjärjestystä. | Kartta ei myöskään ylläpidä lisäysjärjestystä. |
| Voimme lisätä minkä tahansa määrän nolla-arvoja. | Mutta sarjassa melkein vain yksi nolla-arvo. | Kartta sallii enintään yhden nollaavaimen ja minkä tahansa määrän nolla-arvoja. |
| Listan toteutusluokat ovat Array List ja LinkedList. | Joukkototeutusluokat ovat HashSet, LinkedHashSet ja TreeSet. | Kartan toteutusluokat ovat HashMap, HashTable, TreeMap, ConcurrentHashMap ja LinkedHashMap. |
Lisätietoja saat artikkelista - Ero luettelon, joukon ja kartan välillä Javassa
16. Mitä eroa on jonolla ja pinolla?
| Pino | Jonottaa |
|---|---|
| Stacks toimii LIFO-periaatteella, mikä tarkoittaa, että viimeiseksi lisätty elementti on ensimmäinen, joka poistetaan. | Jonot toimivat FIFO-periaatteella, mikä tarkoittaa, että ensimmäisenä lisätty elementti poistetaan ensimmäisenä. |
| Pinoissa lisäys ja poisto tapahtuu vain ylhäältä. | Jonoissa lisäys tapahtuu luettelon takaosassa ja poisto tapahtuu luettelon etupuolelta. |
| Insert-toimintoa kutsutaan push-operaatioksi. | Insert-toimintoa kutsutaan jonooperaatioksi. |
| Poistotoimintoa kutsutaan pop-operaatioksi. | Poista-toimintoa kutsutaan jonosta poistamiseksi. |
| Pinon yläreuna osoittaa aina luettelon viimeiseen elementtiin, joka on ainoa osoitin, jolla luetteloon pääsee. | Kaksi osoitinta ylläpidetään jonoihin pääsyä varten. Etuosoitin osoittaa ensimmäiseen lisättyyn elementtiin ja takaosoitin viimeksi lisättyyn elementtiin. |
17. Mikä on BlockingQueue Javassa?
Javan BlockingQueue-käyttöliittymä on lisätty Java 1.5:een yhdessä useiden muiden samanaikaisten Utility-luokkien kanssa, kuten ConcurrentHashMap, Counting Semaphore, CopyOnWriteArrrayList jne. BlockingQueue-käyttöliittymä tukee vuonohjausta (jonon lisäksi) ottamalla käyttöön eston, jos joko BlockingQueu on täynnä tai tyhjä.
Säie, joka yrittää asettaa elementin jonoon täydessä jonossa, estetään, kunnes jokin muu säie jättää tilaa jonoon joko poistamalla yhden tai useamman elementin jonosta tai tyhjentämällä jonon kokonaan. Vastaavasti se estää viestiketjun, joka yrittää poistaa tyhjästä jonosta, kunnes jotkut muut säikeet lisäävät kohteen. BlockingQueue ei hyväksy nolla-arvoa. Jos yritämme asettaa nollakohteen jonoon, se heittää NullPointerExceptionin.
BlockingQueuen käyttö
Jonon esto Javassa
BlockingQueuen hierarkia
Estojonon hierarkia Javassa
Ilmoitus:
public interface BlockingQueue extends Queue
Tässä, JA on kokoelmaan tallennettujen elementtien tyyppi.
Lisätietoja saat artikkelista - BlockingQueue-käyttöliittymä Javassa
18. Mikä on hashCode()?
Kuva esittelee Java Hash Code
hashCode()-metodi palauttaa hashcode-arvon kokonaislukuna. Se määritellään Java Object -luokassa, joka laskee annettujen syöttöobjektien hash-arvot. Hashcode-arvoa käytetään enimmäkseen hajautuspohjaisissa kokoelmissa, kuten HashMap, HashSet, HashTable jne. Tämä menetelmä on ohitettava jokaisessa luokassa, joka ohittaa equals()-metodin.
Syntaksi :
public int hashCode() // This method returns the hash code value // for the object on which this method is invoked.
Lisätietoja saat artikkelista - equals()- ja hashCode()-metodit Javassa
19. Erota ArrayList ja Vector Java Collection Frameworkissa.
Kokoelmahaastatteluissa tämä kysymys esitetään usein; Vector on kuitenkin synkronoitu, kun taas ArrayList ei. ArrayList on nopeampi kuin Vector. ArrayListin Array-kokoa kasvatetaan 50 % tarvittaessa, kun taas Vectorin kapasiteetti kaksinkertaistetaan aina, kun sitä tarvitaan.
Array List vs Vector javassa
| ArrayList | Vektori |
|---|---|
| ArrayList ei ole synkronoitu | Vektori on synkronoitu. |
| ArrayListin kokoa kasvatetaan 50 %:iin nykyisestä taulukon koosta, jos elementtien määrä ylittää sen kapasiteetin. | ArrayListin kokoa kasvatetaan 100 prosenttiin nykyisestä taulukon koosta, jos elementtien määrä ylittää sen kapasiteetin. |
| ArrayList on nopea, koska sitä ei ole synkronoitu. | Vector on hitaampi, koska se on synkronoitu. |
| Iteraattorirajapintaa käytetään elementtien läpikulkuun | Iteraattorirajapintaa tai Enumeraatiota voidaan käyttää vektorin kulkemiseen. |
Lisätietoja saat artikkelista - Vector vs ArrayList Javassa
20. Tee ero Iteratorin ja ListIteratorin välillä.
| Iteraattori | ListIterator |
|---|---|
| Voi kulkea kokoelmassa olevia elementtejä vain eteenpäin. | Pystyy kulkemaan kokoelmassa olevien elementtien läpi sekä eteen- että taaksepäin. |
| Auttaa kulkemaan kartan, luettelon ja joukon läpi. | Voi kulkea vain luettelossa, ei kahta muuta. |
| Indeksejä ei voi saada Iteratorin avulla. | Siinä on menetelmiä, kuten nextIndex() ja previousIndex(), joiden avulla saadaan elementtien indeksit milloin tahansa Listan läpi kulkiessa. |
| Kokoelmassa olevia elementtejä ei voi muokata tai korvata | Voimme muokata tai korvata elementtejä set(E e) avulla |
Lisätietoja saat artikkelista - Ero Iteraattorin ja ListIteratorin välillä
21. Mitä eroa on iteraattorilla ja luettelolla?
Iteraattori: Se on yleinen iteraattori, koska voimme soveltaa sitä mihin tahansa kokoelmaobjektiin. Iteraattoria käyttämällä voimme suorittaa sekä luku- että poistotoimintoja.
Syntaksi:
// Here 'c' is any Collection object. itr is of // type Iterator interface and refers to 'c' Iterator itr = c.iterator();
Luettelo: Luettelo (tai enum) on käyttäjän määrittämä tietotyyppi. Sitä käytetään pääasiassa nimeämiseen integraalivakioihin, nimet tekevät ohjelman helposti luettavan ja ylläpidettävän.
Syntaksi:
// A simple enum example where enum is declared // outside any class (Note enum keyword instead of // class keyword) enum Color { RED, GREEN, BLUE; } | Iteraattori | Luettelo |
|---|---|
| Iteraattori on universaali kohdistin, koska sitä voidaan soveltaa kaikkiin kokoelmaluokkiin. | Luettelo ei ole yleinen kohdistin, koska se koskee vain vanhoja luokkia. |
| Iteraattorissa on Remove()-menetelmä. | Luettelossa ei ole poista()-menetelmää. |
| Iteraattori voi tehdä muutoksia (esim. käyttämällä remove()-menetelmää, joka poistaa elementin kokoelmasta läpikäynnin aikana). | Luettelorajapinta toimii vain luku -käyttöliittymänä, Kokoelmaan ei voi tehdä muutoksia kokoelman elementtien läpi kulkiessa. |
| Iterator ei ole vanha käyttöliittymä. Iteraattoria voidaan käyttää HashMapin, LinkedListin, ArrayListin, HashSetin, TreeMapin ja TreeSetin läpikulkuun. | Enumeration on vanha käyttöliittymä, jota käytetään Vectorin ja Hashtablen läpikulkuun. |
Lisätietoja saat artikkelista - Ero Iteratorin ja Enumeration välillä
22. Mitkä ovat Java Hashmapin ominaisuudet?
HashMap on samanlainen kuin HashTable, mutta sitä ei ole synkronoitu. Sen avulla voimme myös tallentaa nolla-avaimet, mutta siinä pitäisi olla vain yksi nolla-avainobjekti ja nolla-arvoja voi olla kuinka monta tahansa. Tämä luokka ei takaa kartan järjestystä. Jotta voit käyttää tätä luokkaa ja sen menetelmiä, sinun on tuotava java.util. HashMap paketti tai sen huippuluokka.
HashMap Javassa
Syntaksi:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
Parametrit: Se vaatii kaksi parametria, nimittäin seuraavasti:
- Tämän kartan ylläpitämien avainten tyyppi (K)
- Yhdistettyjen arvojen tyyppi (V)
Lisätietoja saat artikkelista - HashMap Javassa esimerkein
23. Mitä ovat kokoelmaliitännät?
The Kokoelma käyttöliittymä on Java Collections Frameworkin jäsen. Se on osa java.util paketti. Se on yksi kokoelmahierarkian juurirajapinnoista. Mikään luokka ei ole suoraan toteuttanut Collection-rajapintaa. Se toteutetaan kuitenkin epäsuorasti sen alatyyppien tai alirajapintojen, kuten List, Queue ja Set, kautta.
Esimerkiksi, HashSet-luokka toteuttaa Set-rajapinnan, joka on Collection-rajapinnan alirajapinta. Jos kokoelmatoteutus ei toteuta tiettyä toimintoa, sen tulee määrittää vastaava menetelmä UnsupportedOperationExceptionin heittämiseksi.
Kokoelman hierarkia:
Kokoelman käyttöliittymä Javassa
24. Selitä listan käyttöliittymä.
Luokkaliittymä Javassa
Javassa List-käyttöliittymän avulla käyttäjä voi tallentaa järjestetyn objektikokoelman. Luettelo on kokoelman lapsikäyttöliittymä. Kokoelmassa lista on järjestetty kokoelma objekteja, joilla voi olla päällekkäisiä arvoja. Koska List säilyttää lisäysjärjestyksen, se sallii paikantamisen ja lisäyksen, mikä mahdollistaa myös arvojen kaksoiskappaleet.
Syntaksi:
public interface List extends Collection ;
Tämä listarajapinta on toteutettu eri luokilla, kuten ArrayList, Vector, Stack jne. Koska kaikki alaluokat toteuttavat listan, voimme instantoida listaobjektin millä tahansa näistä luokista.
Esimerkki:
List al = uusi ArrayList ();
Lista ll = uusi LinkedList ();
Lista v = uusi vektori ();Missä T on objektin tyyppi
Array List Javassa
Luokat, jotka toteuttavat List-rajapinnan, ovat seuraavat:
- ArrayList
- LinkedList
- Vektori
- Pino
25. Kirjoita ohjelma, joka muuntaa tietyn taulukon kokoelmaksi asList()-menetelmällä.
Voimme käyttää taulukkopohjaisten tietojen muuntamiseen kokoelmapohjaiseksi java.util.Arrays luokkaa. Tämä luokka tarjoaa staattisen menetelmän asList(T… a), joka muuntaa taulukon kokoelmaksi.
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);> > }> }> |
Lähtö
Array input: [Kamlesh, Abhay, Abhishek, Shivansh] Converted elements: [Kamlesh, Abhay, Abhishek, Shivansh]
26. Erota HashSet ja HashMap
| HashSet | HashMap |
|---|---|
| HashSet toteuttaa Set-rajapinnan | HashMap toteuttaa Map-käyttöliittymän |
| Kopioita ei sallita | Kyllä arvojen kaksoiskappaleet ovat sallittuja, mutta kaksoisavainta ei sallita |
| Valearvot ovat sallittuja HashSetissä. | Mitään valearvoja ei sallita HashMapissa. |
| Lisäystoiminnon aikana tarvitaan yksi objekti | 2 Objekteja tarvitaan lisäystoiminnon aikana |
| Nopeus on verrattain hitaampi kuin HashMap | Nopeus on verrattain nopeampi kuin HashSet, koska tässä on käytetty hajautustekniikkaa. |
| Sillä on yksi tyhjä arvo | Yksi tyhjä avain ja mikä tahansa määrä nolla-arvoja |
| Lisäämiseen käytetään Add()-menetelmää | Lisäämiseen käytetään put () -menetelmää. |
Lisätietoja saat artikkelista - Ero HashMapin ja HashSetin välillä
27. Erota HashSet ja HashTable.
| HashSet | HashTable |
|---|---|
| HashSet sallii NULL-elementit | HashTable ei salli NULL-elementtejä. |
| HashSetissä lisäämäsi objektit eivät ole taattuja samassa järjestyksessä. Objektit lisätään niiden hash-koodin perusteella. LinkedHashSetiä voidaan käyttää järjestyksen ylläpitämiseen. | HashTable ei ylläpidä lisäysjärjestystä. |
| HashSet ei ole synkronoitu, mutta se voidaan synkronoida ulkoisesti. | HashTable on synkronoitu. |
| add()-menetelmää käytetään lisäämiseen HashSet-tiedostoon | put()-menetelmää käytetään lisäämiseen HashTable-taulukkoon |
28. Mikä on kuormituskertoimen oletuskoko hajautuspohjaisessa kokoelmassa?
Kun kuormituskerroin kasvaa, kapasiteetti kasvaa niin, että HashMapin toiminnallinen monimutkaisuus pysyy O(1), jos nykyisen elementin suhde alkukapasiteettiin ylittää kynnyksen. O(1):n toiminnallisen monimutkaisuuden merkitys tarkoittaa, että haku- ja lisäystoiminnot vievät jatkuvasti aikaa. Oletuskuormituskertoimen koko on 0,75 . Oletuskapasiteetti lasketaan kertomalla alkukapasiteetti kuormituskertoimella.
Lisätietoja saat artikkelista - Load Factor HashMapissa Javassa esimerkein
Java-kokoelman haastattelukysymyksiä kokeneille
29. Mitä eroa on Javassa Comparablella ja Comparatorilla?
Java tarjoaa kaksi käyttöliittymää objektien lajitteluun käyttämällä luokan datajäseniä:
- Vertailukelpoinen
- Vertailija
| Vertailukelpoinen | Vertailija |
|---|---|
| Vertaileva käyttöliittymä tarjoaa yhden lajittelujärjestyksen. | Comparator-käyttöliittymä tarjoaa useita lajittelusarjoja. |
| Varsinaista luokkaa muokataan vastaavalla käyttöliittymällä | Varsinaista luokkaa ei muokata Comparator-liittymässä. |
| vertailuTo()-menetelmää käytetään elementtien lajitteluun. | vertaa() -menetelmää käytetään elementtien lajitteluun. |
| Vertailukelpoinen löytyy paketista java.lang | Comparator on paketissa java.util |
Lisätietoja saat artikkelista - Vertaileva vs Comparator Javassa
30. Mitä eroa on vikasietoisen ja vikaturvallisen välillä?
Java-iteraattoreita käytetään kokoelma-objektien iterointiin. Fail-Fast iteraattorit heittävät heti ConcurrentModificationException jos on a rakenteellinen muutos kokoelmasta. Rakennemuutos tarkoittaa minkä tahansa elementin lisäämistä tai poistamista kokoelmasta säikeen toistuessa kokoelmassa. ArrayList- ja HashMap-luokkien Iterator ovat esimerkkejä epäonnistuneesta Iteratorista.
| Fail-Fast | Idioottivarma |
|---|---|
| ConcurrentModificationException heitetään, kun objektia muokataan iterointiprosessin aikana. | Poikkeus ei ole heitetty |
| Fail-Fast tarvitsee vähemmän muistia prosessin aikana. | Fail-Safe iterator vaatii enemmän muistia prosessin aikana. |
| Klooniobjektia ei luoda iterointiprosessin aikana. | Klooniobjekti tai kopio luodaan iterointiprosessin aikana. |
| Fail-Fast ei salli muokkaamista iterointiprosessin aikana. | Fail-Safe sallii muokkaamisen iterointiprosessin aikana. |
| Fail-Fast on nopea, | Fail-Safe on hieman hitaampi kuin vikasietoinen. |
| Esimerkkejä: ArrayList, Vector, HashMap, HashSet jne. | Esimerkkejä: ConcurrentHashMap, CopyOnWriteArrayList jne. |
Lisätietoja saat artikkelista - Fail Fast ja Fail Safe Iterators Javassa
31. Kirjoita ohjelma iteroimaan listaa lambda-lausekkeen avulla.
Iterointi voidaan tehdä käyttämällä a lambda ilmaisu.
Syntaksi:
list_name.forEach(variable->{//koodilohko}) 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); });>> |