Razlika između HashMap-a i LinkedHashMap-a

HashMap i LinkedHashMap dvije su od najčešćih implementacija Map-a opće namjene na Java platformi. U osnovi su klase temeljene na hash-u, vrlo su slične jedna drugoj i koriste se za stvaranje karte. Map sučelje je posljednje od glavnih sučelja Collections Framework koje definira operacije koje su podržane skupom asocijacija ključ-vrijednost u kojima su ključevi jedinstveni. Ove implementacije Map temelje se na algoritmu raspršivanja. Dok klasa HashMap implementira neuređene karte, klasa LinkedHashMap implementira naredene mape. Implementacija LinkedHashMap podrazred je klase HashMap, što znači da nasljeđuje značajke klase HashMap. Između njih i dvije u pogledu izvedbe nema velike razlike. Pogledajmo.

Što je HashMap? 

HashMap je jedna od najčešćih i među četiri implementacije opće namjene Map sučelja na Javi koja se temelji na algoritmu raspršivanja. To je analogno zadanoj klasi HashSet, iako su elementi u obje klase neuređeni. Provodi se kao hash tablica, ali za razliku od LinkedHashMap-a, on ne održava nikakav redoslijed ključeva ili vrijednosti. Općenito, HashMap pruža stalne performanse proizvoda i vremena. Klasa nije sigurna u niti, ali dopušta jedan null ključ i više null vrijednosti. Kako ne održava redoslijed ponavljanja, potrebno mu je manje memorije.

Što je LinkedHashMap?

LinkedHashMap nalazi se među četiri implementacije Map-sučelja opće namjene koja je potklasa klase HashMap što znači da nasljeđuje njegove značajke. Iako je u pogledu performansi vrlo sličan HashMap-u, osim što održava redoslijed umetanja tipki, bilo redoslijedom kojim su ključevi umetnuti u mapu ili redoslijedom kojim se unose pristupaju na mapi. Pročišćava ugovor matične klase jamčeći redoslijed kojim iteratori vraćaju svoje elemente. Međutim, treba joj više memorije od HashMap-a, jer održava dvostruko povezan popis u Javi.

Razlika između HashMap-a i LinkedHashMap-a

  1. Osnove HashMap vs. LinkedHashMap

HashMap je implementacija Map sučelja na Javi temeljena na hash. Karte su zbirka parova ključ-vrijednost i koriste se kada su popisi naručeni. HashMap je zbirka klase koja pohranjuje vrijednost u parove ključ-vrijednost. Jednostavno rečeno, preslikava ključeve u vrijednosti što znači da na temelju ključa može pronaći vrijednost. LinkedHashMap je implementacija povezanog popisa sučelja karte baš kao i HashMap, osim što održava redoslijed elemenata umetnutih u nju. To je podrazred HashMap-a koji nasljeđuje njegove značajke. LinkedHashMap pročišćava ugovor matične klase, HashMap, jamčeći redoslijed kojim iteratori vraćaju svoje elemente.

  1. Iteracijski nalog

Ključna razlika između HashMap-a i LinkedHashMap-a je red. Elementi HashMap-a nisu u redoslijedu, posve su slučajni, dok su elementi LinkedHashMap-a poredani. Unosi LinkedHashMap-a nalaze se u redoslijedu umetanja ključeva, a to je redoslijed u kojem su ključevi umetnuti u mapu. To znači da se prvi ključ ubačen u kartu prvo nabraja, pa tako i vrijednost povezana s njom, a zadnji uneseni u zadnji je uvršten. LinkedHashMap ima predvidljiv redoslijed ponavljanja, što znači da također može održavati svoje elemente u redoslijedu pristupa, a to je redoslijed kojim su pristupi unosima.

  1. izvršenje

I klase HashMap i LinkedHashMap koriste hashing za implementaciju sučelja karte u Javi, osim što je HashMap implementiran kao hash tablica, dok LinkedHashMap održava dvostruko povezan popis Buckets koji prolazi kroz sve svoje unose. Zbog toga je LinkedHashMap-u potrebno više memorije od HashMap-a, jer za razliku od HashMap-a, on održava red. Uklanja haotično naručivanje od strane HashMap-a, a da pritom ne pretrpi dodatne troškove koji bi u suprotnom nastali kod TreeMap-a. Pored toga, klasa LinkedHashMap vrlo je slična klasi HashMap u mnogim aspektima kao što su sinkronizacija i null tipke / vrijednosti, jer obje omogućuju jedan null ključ i više null vrijednosti.

  1. Performanse za HashMap vs. LinkedHashMap

Iako obje klase pružaju usporedive performanse, smatra se da je HashMap klasa preferirani izbor ako naručivanje nije problem jer ne jamči redoslijed ponavljanja karte. Operacije poput dodavanja, uklanjanja ili pronalaženja unosa na ključu stalno su vrijeme, jer ključ ima. Dakle, dodavanje, uklanjanje i pronalaženje unosa u LinkedHashMap-u može biti nešto sporije nego u HashMap-u jer održava dvostruko povezan popis Buckets-a na Javi. Uz to, HashMap zahtijeva manje memorije u odnosu na LinkedHashMap jer se ne održava red.

HashMap vs. LinkedHashMap: uporedni grafikon

Sažetak HashMap vs. LinkedHashMap

Iako su i klase HashMap i HashMap gotovo slične u performansama, HashMap zahtijeva manje memorije u odnosu na LinkedHashMap jer ne jamči redoslijed ponavljanja karte, zbog čega se dodavanje, uklanjanje i pronalaženje unosa u HashMapu čine relativno brže od istog sa LinkedHashMap. Međutim, ključna razlika između njih dva je u redoslijedu: elementi HashMap-a nisu u redu, dok su elementi LinkedHashMap-a po zadanom redoslijedu unošenja ključa, što znači redoslijed kojim su ključevi ubačeni u kartu. LinkedHashMap također može održavati svoje elemente u redoslijedu pristupa što znači redoslijed kojim se pristupa unosima. Kao i kod LinkedHashMap-a, treba voditi dvostruko povezan popis koji ima manje performanse od HashMap-a.