Avem TreeSet, TreeMap, dar nu TreeList în colecția Java. De ce?


Cel mai bun răspuns

Gândiți-vă la diferențele dintre o listă, o hartă și un set.

O hartă este o structură care vă permite să căutați lucruri folosind o cheie. Când proiectați pentru căutări, vă dați seama că există o mulțime de comparații cheie și căutările trebuie să fie rapide. Un arbore accelerează procesul de comparare a cheilor prin organizarea cheilor în ramuri; acest lucru reduce numărul de comparații cheie care trebuie făcute.

Într-un set nu există elemente duplicate. De aceea, de fiecare dată când adăugați un articol, trebuie să îl comparați cu articolele existente pentru a vedea dacă este duplicat. Acum ați revenit la aceeași problemă ca și harta, așa că folosiți un copac pentru a vă organiza articolele pentru a reduce comparațiile.

O listă are doar ordine, prin urmare o listă poate fi proiectată cu ușurință astfel încât să nu fie ” Nu aveți nevoie de comparații pentru a obține următorul (sau posibil anterior) element în ordinea listei.

Deci, în timp ce un copac vă poate ajuta să creați o hartă sau un set mai bun, „nu vă poate ajuta cu adevărat să faceți o listă mai bună .

Dacă vorbiți despre o listă sortată , unde elementele sunt inserate în listă în ordine de sortare, acum ați revenit la comparații pentru sortare, astfel încât Arborele să poată ajuta la realizarea unei liste sortate.

Răspuns

Ei bine, o listă este colecție – ceea ce înseamnă că trebuie să aveți capacitatea de a accesa aleatoriu elementul ith. Dacă colecția amestecă intern elementele, ordinea de inserare nu va fi aceeași cu ordinea elementelor din structura internă de date. Deci, nu vă mai puteți baza pe accesul bazat pe index. Prin urmare, Sun nu a oferit o clasă SortedList sau TreeList. Puteți realiza același lucru folosind Collections.sort (..)

Apache commons-collections oferă o clasă TreeList ( TreeList (Commons Collections 3.2.1 API) ), dar nu este o listă sortată și se numește așa deoarece folosește o structură de date arborescentă pentru a stoca elementele intern

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *