HashMap ja HashSet

Anonim

Kun opit uuden tietokoneen kieltä, yksi ensimmäisistä asioista, joita yleensä kysyt, on, miten työskennellä suurien tietoryhmien kanssa. Tämä aihe käsitellään usein aihealueessa "Tieto- rakenteet". Jos kaivaat syvempää, sinun on tultava aiheita, kuten linkitettyjä luetteloita, jonot, pinoja ja binäärisiä puita monien muiden tietorakenteiden joukossa. Javaissa nämä rakenteet ovat osa Java Collections Framework -ohjelmaa. Kokoelma ei ole muuta kuin tietorakenteen tyyppi, joka viittaa useiden datajärjestelmien ryhmittelyyn ja Java-kokoelmakehysta standardoitava tapa, jolla näitä objektiryhmää käsitellään. Itse asiassa kokoelmien kehys on suunniteltu täyttämään useita tavoitteita.

Koko kokoelma-kehys on suunniteltu joukon vakiokäyttöliittymiä. Useat standardit toteutukset, kuten LinkedList, HashSet ja TreeSet, tarjoavat näillä rajapinnoilla, joita voit käyttää. Lisäksi voit myös toteuttaa oman kokoelmasi, jos valitset. Kokoelmien lisäksi kehyksessä määritellään useita karttakäyttöliittymiä ja luokkia. Java sisältää kolme yleiskäyttöistä kartan toteutusta - HashMap, TreeMap ja LinkedHashMap -, jotka tallentavat avain / arvo -pareja. Vaikka kartat eivät ole teknisesti kokoelmia, ne ovat täysin integroituneita kokoelmiin. Itse asiassa kartat keskittyvät esineiden välisiin ryhmittymiin. Tässä artikkelissa kuvataan tärkeimmät erot HashMapin ja HashSetin välillä.

Mikä on HashMap?

HashMap on Map-käyttöliittymän yleisimmin käytetty toteutus, joka tarjoaa perusavaimen / arvokartan, jossa elementit ovat järjestämättömiä. Se käyttää erikoisarvoa, jota kutsutaan hash-koodiksi, eikä avaimen hitaaseen hakuun. Hajautuskoodi on tapa saada tietoa kyseiseltä objektilta ja muuttaa se "suhteellisen ainutlaatuiseksi" kyseiselle objektille. Se toimii yksinkertaisesti hajautusperiaatteella, eli se käyttää hajautusfunktiota tunnistusarvojen kartoittamiseen. Aivan kuten Vector ja Stack ovat korvaavia ArrayList ja LinkedList, Hashtable on korvaava HashMap. Se laajentaa AbstractMapin toteuttamaan Map-rajapinnan sisäisen Hashtable-esityksen avulla. Ja samanlainen kuin muut yleiskäyttöiset toteutukset, HashMap tukee valinnaisia ​​Map-menetelmiä, sallii nollaarvot ja ei ole synkronoitu.

Mikä on HashSet?

HashSet on yksi Java Collection Frameworkin jäsenistä, joka toteuttaa Set-käyttöliittymän, jota tukevat hash-taulukko, joka on itse asiassa HashMap-instanssi. Kuten nimestä käy ilmi, se toteutetaan hajautuspöydällä, jossa elementit tallennetaan niiden sisällöstä johdettuun paikkaan. Toisin kuin kartta, Set on täsmälleen sama käyttöliittymä, joten ei ole ylimääräisiä toimintoja, kuten kahdella eri luettelolla. HashSet käyttää hajautustoimintoa, joka on suunniteltu nimenomaan nopeisiin hakuihin. Se on järjestämättömän ainutlaatuisten esineiden kokoelma, joka ei voi tallentaa päällekkäisiä arvoja. HashSet laajentaa AbstractSet-luokan, joka toteuttaa Set-käyttöliittymän. HashSet ei kuitenkaan määritä muita kuin sen yliluokkien ja rajapintojen tarjoamia muita menetelmiä.

HashMapin ja HashSetin välinen ero

  1. perustiedot

HashMap on Map-käyttöliittymän yleisimmin käytetty toteutus, joka tarjoaa perusavaimen / arvokartan, jossa elementit ovat järjestämättömiä. Se toimii yksinkertaisesti hajautusperiaatteella, eli se käyttää hajautusfunktiota tunnistusarvojen kartoittamiseen. HashSet on puolestaan ​​yksi Java Collection Frameworkin jäsenistä, joka toteuttaa Set-käyttöliittymän, jota tukevat hash-taulukko, joka on itse asiassa HashMap-instanssi. Yksinkertaisesti sanottuna HashMap toteuttaa Map-rajapinnan, kun taas HashSet toteuttaa Set-käyttöliittymän.

  1. toiminnallisuus

HashSet luo kokoelman, joka käyttää hajautustaulukkoa varastointiin. Hash-taulukko tallentaa tietoja käyttämällä menetelmää nimeltä hashing. HashSet käyttää hajautustoimintoa, joka on suunniteltu nimenomaan nopeisiin hakuihin, elementtien tai arvojen tallentamiseen. Suurin osa HashSet-toiminnoista on AbstractCollection- ja AbstractSet-superluokan kautta, jotka HashSet jakaa TreeSetin kanssa. HashMap laajentaa AbstractMapin toteuttaakseen Map-rajapinnan sisäisellä Hashtable-esityksellä.Molemmat luokat eivät ole synkronoituja eli ne eivät sovi lanka-turvallisille toiminnoille.

  1. Duplicate Values

Koska Kartta ei tue kaksoiskappaleita, HashMap ei salli päällekkäisiä avaimia, mutta sen sallitaan saada päällekkäiset arvot. Tämä tarkoittaa, että HashMapissa voi olla päällekkäisiä arvoja, mutta voit käyttää kokoelmia arvona jotain avainta vastaan. Jokaisen avaimen on oltava yksilöllinen HashMapissa, ja yhdellä avaimella ei saa olla yli 1 arvoa. Toisaalta HashSetilla ei voi olla päällekkäisiä elementtejä Setin pelkän määritelmän avulla, joten et voi tallentaa päällekkäisiä arvoja HashSetissa. HashMap mahdollistaa vain yhden nollaavaimen, mutta mahdollistaa minkä tahansa määrän nolla-arvoja, kun taas HashSet mahdollistaa vain yhden nolla-arvon.

  1. Varastointi mekanismi

HashMap toimii hajautusperiaatteella, mikä tarkoittaa, että se käyttää hajautusfunktiota kartoittaakseen tunnistusarvot sisäisesti käyttämällä hajautusalgoritmia helpottamaan helpotusta. Todellinen hajautusmekanismi palauttaa aina saman hashCode-arvon (), kun sitä sovelletaan samaan objektiin. HashSet puolestaan ​​käyttää sisäisesti HashMap-tietokantaa tausta-tietorakenteena objektien lisäämiseen tai tallentamiseen. Tämä tarkoittaa sitä, että kun HashSetin kohde luodaan, se luo HashMapin objektin.

HashMap vs. HashSet: vertailukuvio

Yhteenveto HashMap Vs. HashSet

Vaikka sekä HashMap että HashSet eivät ole synkronoituja, ne eivät sovi lanka-turvallisiin toimintoihin, ja ne ovat täysin erilaisia ​​rakenteita. Ne tarjoavat jatkuvia aikatauluja perustoiminnoille kuten lisäys, elementtien poisto jne. Vaikka HashMap on yleiskäyttöinen Map-rajapinta, joka tallentaa avain- ja arvopareja, HashSet on Set-käyttöliittymän toteutus. HashSet käyttää HashMapia tukemaan sen toteutusta. HashMap käyttää kuitenkin hajautusperiaatetta ja käyttää sitä nopeasti avaimen avaamiseen.