Recentemente sono venuto a sapere che in Java 8 le mappe hash utilizzano un albero binario invece di una lista collegata e il codice hash viene utilizzato come fattore di ramificazione. Comprendo che in caso di collisione elevata la ricerca è ridotta a O (log n) da O (n) usando alberi binari. La mia domanda è: cosa fa veramente bene quando la complessità temporale ammortizzata è ancora O (1) e forse se si forza a memorizzare tutte le voci nello stesso bucket fornendo lo stesso codice hash per tutti le chiavi possiamo vedere una significativa differenza di tempo ma nessuno nelle loro menti lo farebbe.Perché le mappe di hash in Java 8 utilizzano un albero binario invece di un elenco collegato?
L'albero binario utilizza anche più spazio dell'elenco collegato singolarmente poiché memorizza entrambi i nodi sinistro e destro. Perché aumentare la complessità dello spazio quando non c'è assolutamente alcun miglioramento nella complessità del tempo, ad eccezione di alcuni casi di test spuri.
Questo non è un dibattito. Sto citando: * La mia domanda è: cosa fa veramente bene [...] forse se [...] possiamo vedere una differenza di tempo significativa, ma nessuno nelle loro menti lo farebbe. *. Quindi stai dicendo che è stato progettato per gestire un caso che nessuno nella mente giusta farebbe, quindi che gli sviluppatori ** hanno esplicitamente ** gestito un caso stupido, quindi che gli sviluppatori sono stupidi e che tu mantenga la Verità. Suggerisco di riformulare la tua domanda. – Tunaki
La tua domanda non ha senso. Se si presuppone che le collisioni di hash non si verificheranno, allora l'albero binario * non * consumerà più spazio dato che l'albero binario verrà utilizzato solo quando * ci sono * collisioni di hash. Per essere più precisi, il numero di collisioni deve superare una soglia prima che l'implementazione passi dall'elenco collegato all'albero binario. – Holger
@Tunaki Specificatamente intendevo che le persone cercassero deliberatamente quello scenario per mostrare il vantaggio e se pensassi che non c'è niente di più non lo avrei mai chiesto come una domanda. – user1613360