Întrebări frecvente cu privire la clasa de colectare interviuri în Java (partea 1)

Întrebări frecvente cu privire la interviurile de clase de colectare în Java (partea 1).

Fără îndoială, colecția în Java este un domeniu extrem de important, și întrebări despre colecțiile va cere interviuri atât pentru programatori începători și cu experiență. Subiectul este atât de mare încât este practic imposibil să-l acopere în întregime. Cu toate acestea, pe baza interviurilor mele anterioare, voi încerca să lista cât mai mult posibil este o întrebare bună, la care trebuie să fie pregătit.
Întrebările vor fi atât de complicat și simplu, astfel încât, dacă întrebarea pare prea primitiv - nu uitați că este perfect pentru programatori mai puțin experimentați.

Întrebări în acest articol:
probleme generale
De asemenea, cadrul conține interfața hărții. care nu este moștenitor al interfeței de colectare. Motivul pentru care el nu a moștenit colecția. vom discuta despre a patra întrebare.
  • De ce nu moștenesc de colectare Cloneable și serializabil interfețele?
    Ei bine, răspunsul simplu - „, deoarece nu este necesar“ Funcționalitatea oferă o interfață Cloneable și Serializable pur și simplu nu este necesară pentru colecțiile.

    Un alt motiv - nu întotdeauna nevoie de subclasă Cloneable deoarece fiecare operațiune de clonare consumă o mulțime de memorie, iar programatorii neexperimentați pot cheltui ei înșiși fără să realizeze consecințele.

    Și ultimul motiv - clonarea și serializarea sunt foarte strict operațiuni specifice, și își dau seama că au nevoie doar atunci când aveți nevoie de ea. Multe clase de colectare a pune în aplicare aceste interfețe, dar nu-i nevoie de amanet pentru toate colecțiile în general. Dacă aveți nevoie pentru a clona și serializare - trebuie doar să utilizați clasele în care este, în cazul în care nu - celelalte clase.
  • De ce interfață Harta nu moștenește interfața de colectare?
    Un răspuns bun la această întrebare - „deoarece acestea sunt incompatibile.“ În metoda descrisă interfața de colectare add (Object o). Dicționare nu poate conține această metodă, deoarece ei lucrează cu perechile cheie / valoare. De asemenea, dicționare nu au nici o idee keySet, valueSet, care nu sunt în colecții.

    Datorită acestor diferențe, interfața hărții nu poate moșteni interfața de colectare. și reprezintă o ramură separată a ierarhiei.

    Întrebări despre Liste
  • De ce folosim liste? Care sunt principalele clase de a pune în aplicare interfața List?
    Listele în Java este o colecție ordonată de elemente. Fiecare element are un indice, începând cu zero. Toți indicii sunt unice. Plus față de metodele descrise în colecția de interfață. listele au propriile lor metode, în principal, pentru a lucra cu elementele colecției în indexul lor. Puteți împărți aceste metode în 3 grupe - căutarea pentru elementul, să primească un element particular, prin colectarea și sub-eșantionare. Toate aceste operații pot fi efectuate pe indicele elementului.

    clase de bază care implementează lista de interfață este stiva, Vector, ArrayList si LinkedList. Pentru mai multe informații despre ele, consultați documentația.
  • Cum de a converti o matrice șir la un ArrayList?
    Această întrebare este un pic mai profund decât doar de programare, cum începători văzut. Scopul său - pentru a verifica cunoștințele candidatului de utilitate cadru de colectare clase. Luați în considerare două astfel de clase, cele mai cautate pentru interviuri - Colecții și Vectori. Clasa Colecții oferă metode statice pentru operațiunile efectuate pe colecții. Prin urmare Tablourile oferă metode statice pentru operațiunile de matrice.
    Aș dori, de asemenea, să se constate că această metodă este capabil de a nu numai de manipulare șir, se va crea o listă de elemente de orice tip, care a fost o matrice.
  • Cum de a sorta lista în ordine inversă?
    La fel ca și cea anterioară, această întrebare testează cunoștințele Colectia clase de utilitate
    Întrebări despre seturile
  • De ce folosim mult? Care sunt principalele clase implementeze interfata Set?
    El modelează setul matematice de teoria mulțimilor. Setați interfața este similară cu lista. dar are unele diferențe. În primul rând - aceasta nu este o colecție ordonată. Prin urmare, adăugarea / ștergerea de elemente nu necesită sortare. Caracteristica principală a seturilor - unicitatea elementelor, care este unul și același element nu poate fi conținută în setul de două ori.

    Foarte important pentru operarea sunt stabilite equals () și hashCode (). acestea vă permit să comparați o varietate de diferite clase. Două seturi sunt identice numai în cazul în care conțin aceleași elemente.

    Rezultă din cele de mai sus, setul nu are suport pentru operațiunile bazate pe indicele elementului sub forma unei liste. Seturile sunt doar acele metode care sunt descrise în colecția de interfață.

    Principalele clase care implementează Set de interfață. sunt EnumSet, HashSet, LinkedHashSet și TreeSet. Dacă vrei să afli mai multe - citiți secțiunile relevante ale documentației Java.
  • Ca elemente sunt stocate într-un HashSet?
    După cum știți deja, un magazine HashMap perechi cheie / valoare și cheile trebuie să fie unice. HashSet folosește HashMap această caracteristică pentru a asigura unicitatea elementelor sale. Clasa HashSet. Dicționar descris după cum urmează:

    Deci, atunci când salvați elementul din set, acesta pune acest element ca o cheie în dicționar, iar valoarea obiectului este în prezent, așa cum este descris mai jos:

    Vă sugerez cu tărie să citiți acest articol. aceasta vă va ajuta să răspundă cu ușurință la toate întrebările legate de HashMap.
  • Poate fi adăugat elementul nul la TreeSet sau un HashSet?
    După cum se poate observa din răspunsul anterior, metoda add (), nici o verificare pe nul. De asemenea, HashMap permite o cheie este nul. în consecință, un singur element nul poate fi adăugat la HashSet.

    TreeSet funcționează pe același principiu ca și HashSet. dar utilizează elemente de stocare NavigableMap

    NavigableMap este o clasă care moștenește de la SortedMap. SortedMap și nu permite utilizarea cheilor nule. În consecință, TreeMap nu are suport pentru stocarea de elemente, cum ar fi nulă. Dacă încercați să adăugați un nul în TreeSet. obține o NullPointerException excepție.

    Întrebări despre dicționare
    WeakHashMap o implementare a interfeței Map. care conține legături slabe ale elementelor. Aceasta este, în cazul în care WeakHashMap afara nu a existat o singură referire la elementul său, acest element este îndepărtat prin colectorul de gunoi. Această clasă este proiectat pentru a fi utilizat cu obiecte ale căror equals (), metoda verifică identitatea obiectelor folosind operatorul ==. După ce elementul va fi îndepărtat prin colectorul de gunoi, acesta nu poate fi restaurat, și mult spre surprinderea programator să-l găsiți în dicționar nu mai funcționează.
  • Explica ce ConcurrentHashMap? Cum funcționează?
    Luate din documentația oficială:
    Dicționar de punere în aplicare sprijină pe deplin multi-threading pentru a adăuga / șterge / elemente de căutare. Această clasă trebuie să fie aceleași specificații ca Hashtable, și Hashtable conține metode metode adecvate. Cu toate acestea, chiar dacă toate operațiile sunt thread-safe, elementele de probă ale operațiunii nu bloca masa, și nici o ocazie de a interzice orice acces la masă. Această clasă este compatibil cu Hashtable în toate problemele cu excepția sincronizare multifir.
  • Cum HashMap?
    Cea mai importantă întrebare, care este probabil să fie întrebat în timpul interviului la orice programator nivel. Ar trebui să fie bine versat în subiect, și nu doar pentru că este întrebarea cea mai întrebat, dar, de asemenea, pentru că înțelegerea dispozitivului HashMap vă permite să înțeleagă cu ușurință caracteristicile celorlalte colecții.

    Răspunsul la această întrebare este foarte extinsă, și este complet posibil pentru a citi în acest articol - modul în care HashMap. Și, în acest moment, doar amintiți-vă că HashMap funcționează prin hashing. Dicționar, prin definiție, este un obiect care se leagă chei și valori. Pentru depozitarea unor astfel de structuri, se utilizează o intrare de clasă internă.

    Variabile și valoarea cheie utilizată pentru a stoca o cheie și o valoare. Și obiectele sunt în intrarea matrice

    Indicele elementului dorit în matrice se calculează prin codul hash-cheie. Mai multe informații sunt disponibile prin intermediul link-ul de la începutul unui răspuns.
  • Cum de a crea o cheie bună pentru dicționar?
    Ceea ce urmează este o întrebare bună, care este de obicei stabilit după eliberarea funcționării HashMap. Prin urmare, o limitare majoră - cheia este să fie de așa natură încât de atunci ar putea fi obținute de sensul dicționarului. În caz contrar, este utilizat pur și simplu nu are sens. Dacă ați înțeles modul în care HashMap, știi că munca lui este foarte dependentă de hashCode () și (egali) chei obiect.

    După cum se poate observa din cele de mai sus, cheia este de a oferi unul bun și același hashCode din nou și din nou, indiferent de cât de multe ori a solicitat. De asemenea, aceleași chei atunci când se solicită equals () ar trebui să se întoarcă adevărat. și diferite - fals.

    Din care rezultă că cei mai buni candidați pentru rolul de clase cheie sunt imuabile.

    TreeMap este un tip special de HashMap. Diferența este că cheile sunt stocate într-un TreeMap ordonat. În mod implicit, „sortarea naturală“. Override de sortare poate fi furnizată o copie de clasă Comparator. compara și metoda care va fi utilizată pentru cheia de sortare.

    Vă rugăm să rețineți că toate cheile sunt adăugate în dicționar trebuie să pună în aplicare interfața Comparabil (necesar pentru sortare). Mai mult decât atât, toate cheile trebuie să fie reciproc compatibile: k1.compareTo (k2) nu trebuie să provoace un ClassCastException pentru orice k1 și k2 sunt stocate în dicționar. În cazul în care utilizatorul încearcă să pună o cheie în dicționar care încalcă această condiție (de exemplu, o cheie șir la dicționar în care toate cheile sunt de tip Integer), metoda pune (element obiect, valoarea Object) ar trebui sa apel ClassCastException.

    dimensiunea lista numList după această conversie va fi neschimbată. pentru că așa cum se menționează în B.Ekkelya „care stau la baza reprezentării este o matrice care nu permite redimensionarea. Apelarea adăuga () sau șterge () pentru această listă va încerca să schimbe dimensiunea de matrice, iar acest lucru va duce la o eroare de execuție“. Cu alte cuvinte, lista noastră este pur și simplu înveliș sursă de matrice. De la aproximativ Arrays.asList JavaDoc (): Returnează o listă dimensiune fixă ​​susținută de matrice specificat.
    Dar o astfel de operațiune:

    returnează deja o colecție completă, care poate fi variat în mărime, din moment ce suntem deja de lucru cu un record curat.
    După cum a informat Eckel, utilizarea mai eficientă a metodelor de Collections.addAll () - această metodă este mult mai rapid:

    Reader 12502/84 subiect

    live acum

    • Discutarea temei sarcini: 2408
      Abonații: 12441 "class =" js-infobox „> 192.22
    • Traduceri Topeka: 84
      Abonații: 12502 "class =" js-infobox „> 34.02
    • Stiri din Topeka: 199
      Abonații: 12330 "class =" js-infobox „> 31.86
    • IntelliJ Idea Topeka: 23
      Abonații: 12485 "class =" js-infobox „> 21.62
    • subiect de discuție pentru prelegeri: 41
      Abonații: 12478 "class =" js-infobox „> 20.36
    • modele de design Topeka: 2
      Abonații: 26 "class =" js-infobox „> 11.48
    • Govnokod Topeka: 22
      Abonații: 70 "class =" js-infobox „> 5,66
    • Articole SUBIECT: 75
      Abonații: 12483 "class =" js-infobox „> 5,66
    • Exemple de elemente de testare Topeka 6
      Abonații: 13 "class =" js-infobox „> 4,08
    • Arbor Topeka: 110
      Abonații: 125 "class =" js-infobox „> 3,41

    articole similare