Vi har TreeSet, TreeMap, men ikke TreeList i Java-samlingen. Hvorfor så? (Norsk)


Beste svaret

Tenk på forskjellene mellom en liste, et kart og et sett.

Et kart er en struktur som lar deg slå opp ting ved hjelp av en nøkkel. Når du designer for oppslag, innser du at det er mange nøkkelsammenligninger, og oppslag må være raske. Et tre fremskynder nøkkelsammenligningsprosessen ved å organisere nøklene i grenene. Dette reduserer antall nøkkelsammenligninger som må lages.

I et sett er det ingen dupliserte elementer. Så hver gang du legger til et element, må du sammenligne det med de eksisterende elementene for å se om det er duplikat. Nå er du tilbake til det samme problemet som kartet, så du bruker et tre for å organisere elementene dine for å redusere sammenligning.

En liste har bare bestilling, og derfor kan en liste enkelt utformes slik at den ikke » t krever sammenligninger for å få neste (eller muligens forrige) element i listerekkefølgen.

Så mens et tre kan hjelpe deg med å lage et bedre kart eller sett, kan det ikke virkelig hjelpe deg med å lage en bedre liste .

Hvis du snakker om en sortert liste, der elementer settes inn i listen i sorteringsrekkefølge, er du nå tilbake til sammenligninger for å sortere slik at treet kan hjelpe til med å lage en sortert liste.

Svar

Vel, en liste er bestilt samling – som betyr at du må ha muligheten til å tilfeldig få tilgang til ith-elementet. Hvis samlingen blandes elementene internt, vil ikke innsettingsrekkefølgen være den samme som rekkefølgen til elementene i den interne datastrukturen. Så du kan ikke stole på indeksbasert tilgang lenger. Derfor ga Sun ikke en SortedList eller en TreeList-klasse. Du kan oppnå det samme ved hjelp av Collections.sort (..)

Apache commons-collection gir en TreeList-klasse ( TreeList (Commons Collections 3.2.1 API) ), men det er ikke en sortert liste og kalles det fordi det bruker en tredatastruktur for å lagre elementene internt

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *