Interviu Java junior: egalitate și colecții
Pregătește interviul Java junior: înțelege equals și hashCode, alege colecțiile potrivite și verifică un exemplu complet cu duplicate și ordine stabilă.
În acest material
La un interviu Java de nivel junior trebuie să poți explica ce face codul, să alegi o colecție potrivită și să verifici rezultatul pe exemple mici. Începem cu o întrebare care leagă obiectele de colecții: când considerăm două valori egale?
Ce pregătești la acest nivel
Ai nevoie de variabile, condiții, bucle, metode și clase. Parcurge în ordine: tipuri primitive și referințe, încapsulare și interfețe, egalitate, colecții, apoi excepții și teste. Acest articol dezvoltă egalitatea și folosirea unui set. Exemplul rulează pe Java 21 sau mai nou, fără biblioteci externe.
Junior nu înseamnă să reciți toate metodele din bibliotecă. Înseamnă să rezolvi o cerință delimitată, să explici ipotezele și să recunoști ce trebuie verificat. Dacă primești o cerință ambiguă, prima întrebare este despre comportamentul dorit, înainte de implementare.
Referință și valoare
Pentru obiecte, == verifică dacă referințele indică același obiect. equals exprimă egalitatea definită de clasa respectivă. Implementarea implicită din Object compară tot identitatea; o clasă poate redefini metoda pentru a compara datele. Două obiecte distincte pot reprezenta aceeași adresă de email.
Contractul cere ca obiectele egale prin equals să aibă același hashCode. Inversa nu este obligatorie: două obiecte diferite pot avea același cod hash. Un cod hash nu este un identificator unic și nu trebuie folosit ca parolă sau cheie de business. Regulile sunt descrise în documentația Object.
Exemplu: eliminăm duplicatele, păstrăm ordinea
Primești adrese ca argumente în linia de comandă. Contractul exercițiului este simplu: egalitatea este exactă, cu diferență între litere mari și mici. Nu normalizăm adresele și nu validăm formatul lor. Alegem LinkedHashSet pentru eliminarea duplicatelor și ordinea primei apariții.
import java.util.LinkedHashSet;
import java.util.Set;
public class Main {
record Email(String value) {}
public static void main(String[] args) {
Set<Email> unique = new LinkedHashSet<>();
for (String value : args) {
unique.add(new Email(value));
}
for (Email email : unique) {
System.out.println(email.value());
}
}
}
Salvează programul în Main.java, compilează cu javac Main.java, apoi rulează java Main ana@example.test ion@example.test ana@example.test. Rezultatul are două linii: ana@example.test, apoi ion@example.test. Fără argumente, programul nu afișează nimic. Cu Ana@example.test și ana@example.test, rezultatul are două valori, conform contractului ales.
Un record generează egalitatea și codul hash pornind de la componente. Aici componenta este un String, care este imuabil. Un record ce conține o listă modificabilă nu devine automat profund imuabil. Într-un set bazat pe hash, schimbarea datelor care participă la egalitate poate face căutările incorecte. De aceea modelul cheii contează, nu doar alegerea colecției.
Cum explici alegerea la interviu
Un List păstrează duplicatele. Un HashSet elimină duplicatele, dar nu oferă această ordine de iterare. Un LinkedHashSet păstrează ordinea de inserare. Un TreeSet introduce o ordine bazată pe comparație și necesită o regulă de comparație potrivită.
Pentru n argumente și k valori distincte, memoria suplimentară este O(k). Cu o distribuție bună a codurilor hash, numărul operațiilor pe set este în medie O(n). Dacă lungimea textelor variază, calcularea și compararea valorilor text adaugă propriul cost. Spune explicit ce măsori atunci când discuți complexitatea.
Exersează
- Prezice rezultatul pentru argumentele
a b a A b. Răspuns:a,b,A, pe linii separate. - Explică de ce două instanțe
new Email("a")sunt egale prin valoare. Răspuns: egalitatea generată de record compară componenta, nu identitatea instanțelor. - Schimbă cerința: rezultatul trebuie sortat alfabetic. Propune fie sortarea valorilor unice, fie un set ordonat cu o comparație explicită. Verifică și cazul gol.
Autoevaluare și pasul următor
Ești pregătit să continui dacă poți distinge identitatea de egalitate, poți justifica setul ales și poți inventa trei teste relevante fără să rulezi programul. Repetă explicația cu voce tare în două minute. Continuă cu Java mid: colecții și contracte de date.
Întrebări frecvente
Trebuie să folosesc record la orice interviu?
Nu. Confirmă versiunea Java și cerința. O clasă obișnuită este potrivită când ai nevoie de alt model; trebuie însă să implementezi coerent egalitatea și codul hash.
HashSet păstrează ordinea de inserare?
Nu oferă acest contract. Chiar dacă un exemplu mic pare ordonat, nu construi logica pe acea observație.
Două coduri hash egale dovedesc egalitatea?
Nu. Coliziunile sunt permise. Colecția trebuie să distingă obiectele și prin egalitate.
Pot modifica un obiect după ce l-am pus în set?
Evită să modifici câmpurile folosite de egalitate și hash. Pentru un exercițiu de interviu, o cheie imuabilă simplifică atât explicația, cât și verificarea.
Câți ani de experiență definește acest nivel?
Nu folosim un prag fix. Acest parcurs descrie competențe, iar așteptările unei companii trebuie discutate separat.
Surse și versiuni
Exemplu pentru Java 21+, verificat față de Record și LinkedHashSet. Surse consultate la 12 octombrie 2026.