Un BST echilibrat este de preferat în cazul în care aveți nevoie pentru a proteja structura de date de la crampoane latență și atacuri coliziuni hash.
Cea dintâi se întâmplă atunci când o structură susținută-matrice crește o devine redimensionate, acesta din urmă este o proprietate inevitabilă a hashing algoritm ca o proiecție de spațiu infinit la un interval întreg limitat.
O altă problemă în .NET este că există LOH, și cu un dicționar suficient de mare ai alerga într-o fragmentare LOH. În acest caz, puteți utiliza un BST, plătește un preț de clasă complexitate algoritmică mai mare.
Pe scurt, cu o BST susținută de mormanul de alocare te timp cel mai rău caz O (log (N)), cu hashtable ai O (N) cel mai rău caz timpul.
BST vine la un preț de O (log (N)) timpul mediu, localitatea cache mai rău și mai multe alocări heap, dar are garanții de latență și este protejat de atacuri de dicționar și fragmentarea memoriei.
menționând în valoare de faptul că BST este, de asemenea, un subiect la fragmentarea memoriei pe alte platforme, nu folosind un colector de gunoi de compactare.
În ceea ce privește dimensiunea memoriei, clasa .NET Dictionary`2 este mult mai eficient de memorie, deoarece stochează date ca o listă legată off-heap, valoare care doar stochează și informații de offset. BST are pentru a stoca antet obiect (ca fiecare nod este un exemplu de clasă pe heap), două indicii, și unele date de arbori augmentată pentru copaci echilibrate. De exemplu, un arbore rosu-negru ar avea nevoie de un boolean interpretat ca culoare (roșu sau negru). Acest lucru este de cel puțin 6 cuvinte de mașină, dacă nu mă înșel. Deci, fiecare nod într-un arbore rosu-negru pe sistemul pe 64 de biți este un minim de:
3 cuvinte pentru antet = 24 octeți 2 cuvinte pentru copil pointerii = 16 octeți 1 cuvânt pentru culoare = 8 octeți de cel puțin 1 cuvânt pentru valoarea 8+ octeți = 24 + 16 + 8 + 8 = 56 octeți (+8 octeți în cazul în care arborele folosește un nod pointer părinte).
În același timp, dimensiunea minimă a intrării în dicționarul ar fi doar 16 bytes.