Java HashMap ir TreeMap abi yra „Java Collections“ sistemos klasės. „Java Map“ diegimas paprastai veikia kaip maišos lentelė su segmentais. Kai kibirai tampa per dideli, jie virsta mazgais TreeNodes , kurių kiekvieno struktūra panaši į esančias java.util.TreeMap .
HashMap
HashMap padargai Žemėlapis, klonuojamas ir Serializuojama sąsaja. Jis tęsiasi AbstractMap klasė. Tai priklauso java.util paketą.
- „HashMap“ yra vertė, pagrįsta raktu.
- Jis gali turėti vieną nulinį raktą ir kelias nulines reikšmes.
- HashMap nepalaiko tvarkos kartodamas.
- Jame yra unikalių elementų.
- Jis veikia maišos principu.
TreeMap
TreeMap klasė plečiasi AbstractMap klasė ir padargai Naviguojamas žemėlapis , Galima klonuoti , ir Serializuojama sąsaja. TreeMap yra pavyzdys a Rūšiuotas žemėlapis . Jį įgyvendina raudonai juodas medis, o tai reiškia, kad raktų tvarka yra rūšiuojama.
įterpimo rūšiavimas
- TreeMap taip pat turi reikšmę, pagrįstą raktu.
- TreeMap yra rūšiuojamas pagal raktus.
- Jame yra unikalių elementų.
- Jis negali turėti nulinio rakto, bet turi kelias nulines reikšmes.
- Raktai yra didėjančia tvarka.
- Jis saugo objektą medžio struktūroje.
„HashMap“ ir „TreeMap“ panašumai
- Abi klasės tęsiasi AbstractMap klasė.
- Žemėlapis yra saugomas objektas rakto vertė porų. Rakto-reikšmių poroje kiekvienas raktas yra unikalus, tačiau jų reikšmės gali būti dublikatas .
- Abi klasės žymi atvaizdavimą iš Raktas į vertybes .
- Abu žemėlapiai nėra sinchronizuoti .
- Žemėlapio naudojimas įdėti () būdas įtraukti elementą į žemėlapį.
- Iteratorius meta a ConcurrentModificationException jei žemėlapis bus kaip nors pakeistas.
Pagrindinis skirtumas tarp HashMap ir TreeMap yra:
HashMap neišsaugo iteracijos tvarkos, kol TreeMap išsaugoti užsakymą naudodami palyginti su() metodas arba a lyginamoji priemonė nustatyti TreeMap konstruktoriuje.
polimorfizmas java
Šioje lentelėje aprašomi „HashMap“ ir „TreeMap“ skirtumai.
Pagrindas | HashMap | TreeMap |
---|---|---|
Apibrėžimas | Java HashMap yra maišos pagrindu sukurtas žemėlapio sąsajos įgyvendinimas. | Java TreeMap yra medžio struktūra pagrįstas žemėlapio sąsajos įgyvendinimas. |
Sąsajos padargai | HashMap padargai Žemėlapis, klonuojamas , ir Serializuojama sąsaja. | TreeMap padargai NavigableMap, Klonuojamas , ir Serializuojama sąsaja. |
Nuliniai klavišai / reikšmės | HashMap leidžia a viengungis nulinis klavišas ir daugkartinis nulinės reikšmės. | TreeMap neleidžia nulinis raktus, bet gali turėti daugkartinis nulinės reikšmės. |
Homogeniškas/ Heterogeninis | „HashMap“ leidžia naudoti nevienalyčius elementus, nes neatlieka raktų rūšiavimo. | TreeMap leidžia vienarūšes reikšmes kaip raktą dėl rūšiavimo. |
Spektaklis | HashMap yra greičiau nei TreeMap, nes jis užtikrina pastovų našumą, kuris yra O(1) pagrindinėms operacijoms, tokioms kaip get() ir put(). | TreeMap yra lėtas palyginti su HashMap, nes jis suteikia O(log(n)) našumą daugeliui operacijų, tokių kaip add(), remove() ir include(). |
Duomenų struktūra | HashMap klasė naudoja maišos lentelė . | „TreeMap“ viduje naudoja a Raudona-Juoda medis, kuris yra savaime balansuojantis dvejetainis paieškos medis. |
Palyginimo metodas | Tai naudoja lygus () metodas Objektas klasėje, kad palygintumėte raktus. Map klasės metodas equals() jį nepaiso. | Jis naudoja palyginti su() raktų palyginimo būdas. |
Funkcionalumas | HashMap klasėje yra tik pagrindinės funkcijos, pvz gauti(), įdėti(), KeySet() ir tt . | „TreeMap“ klasė turi daug funkcijų, nes joje yra tokių funkcijų kaip: uodegos žemėlapis(), pirmasis raktas(), paskutinis raktas(), apklausaPirmasis įrašas(), apklausaLastEntry() . |
Elementų tvarka | HashMap nepalaiko jokios tvarkos. | Elementai surūšiuoti natūrali tvarka (didėjantis). |
Naudoja | „HashMap“ turėtų būti naudojamas, kai nereikalaujame rakto-reikšmių poros rūšiavimo tvarka. | „TreeMap“ turėtų būti naudojamas, kai reikalaujame rakto-reikšmių poros rūšiavimo (didėjimo) tvarka. |
HashMap vs TreeMap pavyzdys
Toliau pateiktame pavyzdyje galime pastebėti, kad HashMap elementai yra atsitiktine tvarka, o TreeMap elementai yra išdėstyti didėjančia tvarka.
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()); } } }
Išvestis: