Forskellen mellem HashMap og LinkedHashMap

HashMap og LinkedHashMap er to af de mest almindelige og generelle kortimplementeringer i Java-platformen. De er dybest set hashbaserede klasser, der ligner hinanden og bruges til at oprette et kort. Kortgrænsefladen er den sidste af de vigtigste samlinger Framework-grænseflader, der definerer de operationer, der understøttes af et sæt nøgle-til-værdi-foreninger, hvor nøglerne er unikke. Disse kortimplementeringer er baseret på en hash-algoritme. Mens klassen HashMap implementerer uordnede kort, implementerer klassen LinkedHashMap implementerede kort. LinkedHashMap-implementeringen er en underklasse af HashMap-klassen, hvilket betyder, at den arver funktionerne i klasse HashMap. Der er ikke meget forskel mellem de to med hensyn til ydeevne. Lad os se.

Hvad er HashMap? 

HashMap er en af ​​de mest almindelige og blandt de fire generelle implementeringer af Map-grænsefladen i Java baseret på en hashing-algoritme. Det er analogt med den indstillede klasse HashSet, selvom elementerne ikke er sorteret i begge klasser. Det implementeres som en hash-tabel, men i modsætning til LinkedHashMap opretholder den ingen rækkefølge på nøgler eller værdier. Generelt giver HashMap konstant tidsydelse til put and get. Klassen er ikke tråd-sikker, men det tillader en nul-nøgle og flere nul-værdier. Da det ikke opretholder en iterating rækkefølge, kræver det mindre hukommelse.

Hvad er LinkedHashMap?

LinkedHashMap er blandt de fire generelle implementeringer af Map-grænsefladen, som er en underklasse af HashMap-klassen, hvilket betyder, at den arver dens funktioner. Selvom det er meget lig HashMap med hensyn til ydeevne, bortset fra at det opretholder indsættelsesrækkefølgen af ​​nøgler, enten i den rækkefølge, hvor nøglerne indsættes i kortet, eller i den rækkefølge, hvor indgangene fås på kortet. Det forbedrer kontrakten med sin moderklasse ved at garantere, i hvilken rækkefølge iteratorerne returnerer sine elementer. Det kræver dog mere hukommelse end en HashMap, fordi den opretholder en dobbeltkoblet liste i Java.

Forskel mellem HashMap og LinkedHashMap

  1. Grundlæggende om HashMap Vs. LinkedHashMap

HashMap er en hash-baseret implementering af Map-interface i Java. Kort er en samling af nøgleværdipar og bruges, når lister er i ordnet samling. HashMap er en samlingsklasse, der gemmer værdi i nøgleværdipar. Kort sagt kortlægger det nøgler til værdier, hvilket betyder, at det kan lokalisere en værdi baseret på en nøgle. LinkedHashMap er en linklisteimplementering af kortgrænsefladen ligesom HashMap bortset fra at den opretholder ordrer af elementer, der er indsat i den. Det er en underklasse af HashMap, der arver dens funktioner. LinkedHashMap forbedrer kontrakten med sin moderklasse, HashMap, ved at garantere den rækkefølge, i hvilken iteratorerne returnerer sine elementer.

  1. Iteration Order

Den vigtigste forskel mellem HashMap og LinkedHashMap er orden. Elementer af en HashMap er ikke i orden, helt tilfældige, mens elementer af LinkedHashMap er bestilt. Posterne i et LinkedHashMap er i nøgleindsættelsesrækkefølge, hvilket er den rækkefølge, hvor nøglerne indsættes i kortet. Dette betyder, at den første nøgle, der er indsat i kortet, tælles først, det samme gør værdien, der er knyttet til den, og den sidste post, der indsættes i nummeret sidst. LinkedHashMap har en forudsigelig iterationsordre, hvilket betyder, at den også kan opretholde sine elementer i adgangsrækkefølge, hvilket er den rækkefølge, hvor indgangene er tilgængelige.

  1. Implementering

Både HashMap og LinkedHashMap klasser bruger hashing til at implementere Map interface i Java undtagen HashMap er implementeret som en hash tabel, mens LinkedHashMap opretholder en dobbelt linket liste over spande, der løber gennem alle dens poster. Derfor kræver LinkedHashMap mere hukommelse end HashMap, fordi den i modsætning til HashMap opretholder en ordre. Det fjerner den kaotiske ordre fra HashMap uden at pådrage sig de ekstra omkostninger, der ellers ville være afholdt med TreeMap. Derudover er klassen LinkedHashMap meget lig HashMap klassen i mange aspekter såsom synkronisering og nul taster / værdier, da begge tillader en nul nøgle og flere nul værdier.

  1. Ydeevne til HashMap Vs. LinkedHashMap

Selvom begge klasser giver sammenlignelig ydeevne, menes HashMap-klassen at være det foretrukne valg, hvis bestilling ikke er et problem, fordi det ikke garanterer, hvad angår den gentagne rækkefølge på kortet. Funktioner såsom tilføjelse, fjernelse eller søgning af poster baseret på en nøgle er konstant tid, da de hash nøglen. Så tilføjelse, fjernelse og søgning af poster i et LinkedHashMap kan være lidt langsommere end i en HashMap, fordi det opretholder en dobbeltkoblet liste over spande i Java. Derudover kræver HashMap mindre hukommelse end LinkedHashMap, fordi ingen ordre opretholdes.

HashMap vs. LinkedHashMap: Sammenligningstabel

Oversigt over HashMap Vs. LinkedHashMap

Mens både HashMap- og HashMap-klasser næsten ligner ydeevne, kræver HashMap mindre hukommelse end et LinkedHashMap, fordi det ikke garanterer kortets itererende rækkefølge, hvilket gør tilføjelse, fjernelse og finde poster i en HashMap relativt hurtigere end at gøre det samme med et LinkedHashMap. Nøgleforskellen mellem de to er imidlertid rækkefølge: elementerne i en HashMap er ikke i rækkefølge, mens elementerne i et LinkedHashMap som standard er i nøgleindsættelsesrækkefølge, hvilket betyder den rækkefølge, hvor nøglerne indsættes i kortet. LinkedHashMap kan også opretholde sine elementer i adgangsordre, hvilket betyder den rækkefølge, hvor indgangene er tilgængelige. Som med LinkedHashMap skal der opretholdes en dobbeltkoblet liste, den har mindre ydeevne end HashMap.