"Vel, hvordan er prosessoren din?"

"Det er OK. Jeg satt i flytende nitrogen i en time, så nå er jeg så god som ny!"

"Flott. Så la oss fortsette."

"Angi samlinger."

Matematisk sett er et sett en gruppe unike elementer. I programmering er et sett derfor en samling unike elementer, dvs. en samling som ikke lar deg lagre identiske elementer.

"Jeg vet ikke om Ellie viste deg Sets arvehierarki. Hvis ikke, her er det:"

Implementeringer av sett- og kø-grensesnittene - 1

"Et HashSet er en samling som lagrer elementer internt ved å bruke hash-verdiene som returneres av hashCode ()-metoden."

"For enkelhets skyld lagrer HashSet<E> et HashMap<E, Object>-objekt som lagrer HashSet-verdiene som nøkler."

"Wow!"

"Ved å bruke hash-koder kan du raskt søke etter, legge til og fjerne elementer fra settet."

"Men husk at klassen din må implementere hashCode & equals -metodene på riktig måte for å legge til objekter fra klassene dine til et sett, og finne dem riktig der."

"Begge metodene brukes mye i HashSet/HashMap. "

"Hvis du glemmer å implementere hashCode ()-metoden, risikerer du ikke å kunne finne objektet ditt i settet, selv om det er til stede."

"Ja, jeg husker, jeg husker. Du fortalte meg om dette tidligere. Jeg har hørt alt om det."

"OK. Så her er litt mer nyttig informasjon for deg."

"Anta at du har implementert hashCode og likes  på riktig måte i klassen din, og at du med glede lagrer objektene dine i et sett."

"Men så går du og endrer et av objektene, og ved å gjøre det endrer du de interne dataene som brukes til å beregne hashen . Så objektets hash endres."

"Og dette betyr at når du søker etter det i settet, vil du sannsynligvis ikke finne det."

"Wow! Hvordan fungerer det?"

"Dette er en velkjent fallgruve når du arbeider med hasher. I hovedsak er HashSet (og HashMap) søk bare garantert å fungere ordentlig hvis objektene er uforanderlige ."

"Wow! Og hva, ingen gjør noe med det?"

"Alle later som om problemet ikke eksisterer. Men dette kommer ofte opp i intervjuer, så det kan være verdt å huske..."

"Et LinkedHashSet er et HashSet hvis elementer også er lagret i en koblet liste. Normale HashSets støtter ikke bestilling av elementene. For det første er det rett og slett ikke en offisiell operasjon. For det andre kan selv den interne rekkefølgen endres betydelig når en enkelt element er lagt til."

Men du kan få en iterator fra et LinkedHashSet og bruke den til å gå gjennom alle elementene i den rekkefølgen de ble lagt til i LinkedHashSet . Det skjer ikke ofte, men noen ganger er dette veldig nødvendig."

"Jeg skjønner. Jeg elsker når det finnes klasser for disse «bare i tilfelle»-scenarioer. Slike tilfeller er ikke så sjeldne."

" TreeSet er en samling som lagrer elementer i form av et tre sortert etter verdier. Et TreeSet <E> inneholder et TreeMap <E, Object> som lagrer alle disse verdiene. Og dette TreeMap bruker et balansert rødt -svart tre for å lagre elementer . Som et resultat støtter den veldig rask legg til, fjern og inneholder operasjoner."

"Ja, jeg husker det. Vi diskuterte det nylig. Og jeg tenkte også på hvor dette brukes."

"Og det viser seg at noen av Javas mest populære samlinger bruker det."

"Jepp. Intervjuere spør forresten ofte om TreeSet . De prøver vanligvis å lure deg. De vil si, 'hvis et TreeSet bruker et binært tre, kan alle elementene danne en lang gren, så søk vil ta en «Dette er akkurat tiden for å sette den frekke karen på plass ved å si: "Selv et barn vet at TreeSet og TreeMap bruker balanserte rød-svarte trær , så den situasjonen er faktisk umulig."

"Ah. Jeg vil gjerne se ansiktet til personen som stilte det spørsmålet. Jeg kan til og med huske den setningen. ...."

"Men i praksis viste det seg at Set ikke var så enkelt som jeg først trodde."

"På den annen side er situasjonen med Queue mye enklere:"

Implementeringer av sett- og kø-grensesnittene - 2

" implementerer en kø. Elementer legges til på slutten av køen og tas fra forsiden."

" PriorityQueue er faktisk den eneste klassiske implementeringen av Queue- grensesnittet, ikke medregnet LinkedList , som teknisk sett også er en kø."

"Ok, jeg begynner å bli sliten. Det var alt for i dag. Til neste gang."