Java HashMap ja TreeMap molemmat ovat Java Collections -kehyksen luokkia. Java Map -toteutus toimii yleensä sekoitettuna hash-taulukkona. Kun kauhat kasvavat liian suuriksi, ne muuttuvat solmuiksi TreeNodes , joista jokainen on rakenteeltaan samanlainen kuin sisällä olevat java.util.TreeMap .
HashMap
HashMap-työkalut Kartta, kloonattava ja Sarjasoitavissa käyttöliittymä. Se ulottuu AbstractMap luokkaa. Se kuuluu java.util paketti.
- HashMap sisältää avaimeen perustuvan arvon.
- Siinä voi olla yksi tyhjä avain ja useita nolla-arvoja.
- HashMap ei ylläpidä järjestystä iteroinnin aikana.
- Se sisältää ainutlaatuisia elementtejä.
- Se toimii hajautusperiaatteella.
TreeMap
TreeMap-luokka laajenee AbstractMap luokka ja välineet Navigoitava kartta , Kloonattavissa , ja Sarjasoitavissa käyttöliittymä. TreeMap on esimerkki a Lajiteltu kartta . Se on toteutettu Red-Black -puulla, mikä tarkoittaa, että avainten järjestys on lajiteltu.
- TreeMap sisältää myös avaimeen perustuvan arvon.
- TreeMap on lajiteltu avainten mukaan.
- Se sisältää ainutlaatuisia elementtejä.
- Sillä ei voi olla nolla-avainta, mutta siinä on useita nolla-arvoja.
- Avaimet ovat nousevassa järjestyksessä.
- Se tallentaa kohteen puurakenteeseen.
HashMapin ja TreeMapin yhtäläisyydet
- Molemmat luokat laajenevat AbstractMap luokkaa.
- Kartta on esine, joka tallentaa avainarvo pareja. Avain-arvo-parissa jokainen avain on ainutlaatuinen, mutta niiden arvot voivat olla kaksoiskappale .
- Molemmat luokat edustavat kartoitusta avain to arvot .
- Molemmat kartat eivät ole synkronoitu .
- Kartan käyttö laittaa() tapa lisätä elementti karttaan.
- Iteraattori heittää a ConcurrentModificationException jos karttaa muutetaan millään tavalla.
Tärkein ero HashMapin ja TreeMapin välillä on:
HashMap ei säilytä iteraatiojärjestystä, kun TreeMap säilytä tilaus käyttämällä vertaa() menetelmä tai a vertailija asetettu TreeMapin konstruktoriin.
Seuraavassa taulukossa kuvataan HashMapin ja TreeMapin väliset erot.
Perusta | HashMap | TreeMap |
---|---|---|
Määritelmä | Java HashMap on hashtable-pohjainen Map-käyttöliittymän toteutus. | Java TreeMap on puurakennepohjainen Map-käyttöliittymän toteutus. |
Käyttöliittymä toteuttaa | HashMap-työkalut Kartta, kloonattava , ja Sarjasoitavissa käyttöliittymä. | TreeMap-työkalut NavigableMap, kloonattava , ja Sarjasoitavissa käyttöliittymä. |
Nollanäppäimet/arvot | HashMap mahdollistaa a yksittäinen nolla-avain ja useita nolla-arvot. | TreeMap ei salli tyhjä avaimet, mutta voi olla useita nolla-arvot. |
Homogeeninen/ heterogeeninen | HashMap sallii heterogeeniset elementit, koska se ei suorita lajittelua avaimille. | TreeMap sallii homogeeniset arvot avaimena lajittelun vuoksi. |
Esitys | HashMap on nopeammin kuin TreeMap, koska se tarjoaa jatkuvan suorituskyvyn, joka on O(1) perusoperaatioille, kuten get() ja put(). | TreeMap on hidas verrattuna HashMapiin, koska se tarjoaa O(log(n))-suorituskyvyn useimmille toiminnoille, kuten add(), remove() ja include(). |
Tietorakenne | HashMap-luokka käyttää hash-taulukko . | TreeMap käyttää sisäisesti a Punamusta puu, joka on itsetasapainottava binäärihakupuu. |
Vertailumenetelmä | Se käyttää on yhtä suuri () menetelmä Esine luokka vertailla avaimia. Map-luokan equals()-metodi ohittaa sen. | Se käyttää vertaa() tapa verrata avaimia. |
Toiminnallisuus | HashMap-luokka sisältää vain perustoiminnot, kuten get(), laita(), KeySet() , jne. . | TreeMap-luokka on runsaasti toimintoja, koska se sisältää toimintoja, kuten: tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry() . |
Elementtien järjestys | HashMap ei ylläpidä mitään järjestystä. | Elementit lajitellaan luonnollinen järjestys (nouseva). |
Käyttää | HashMapia tulee käyttää, kun emme vaadi avain-arvo-paria lajiteltuna. | TreeMapia tulee käyttää, kun vaadimme avain-arvo-paria lajiteltuna (nousevassa) järjestyksessä. |
Esimerkki HashMap vs TreeMap
Seuraavassa esimerkissä voimme havaita, että HashMapin elementit ovat satunnaisessa järjestyksessä, kun taas TreeMapin elementit on järjestetty nousevaan järjestykseen.
import java.util.Map; import java.util.HashMap; import java.util.TreeMap; public class HashMapVsTreeMapExample { public static void main(String args[]) { /*------------HashMap implementation----------------*/ Map hm=new HashMap(); //adding elements to the HashMap hm.put(9, 'Red'); hm.put(12, 'Black'); hm.put(6, 'Green'); hm.put(19, 'White'); System.out.println('HashMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: hm.entrySet()) { //getting keys and values using method System.out.println(entry.getKey() + ' = ' +entry.getValue()); } /*------------TreeMap implementation----------------*/ Map tm=new TreeMap(); //adding elements to the TreeMap tm.put(9, 'Red'); tm.put(12, 'Black'); tm.put(6, 'Green'); tm.put(19, 'White'); System.out.println('TreeMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: tm.entrySet()) { //getting keys and values using method //prints list in sorted order System.out.println(entry.getKey() + ' = ' +entry.getValue()); } } }
Lähtö: