Ci stavo pensando nelle ultime settimane e non ho trovato argomenti validi. La mia prospettiva è di Java, ma se qualcuno ha dei casi specifici per la lingua al di fuori di questa lingua, mi piacerebbe sentirli.
Mi sembra che il vantaggio di usare un Elenco su un Deque derivi dal fatto che si può accedere agli elementi direttamente tramite numeri di indice. Mentre posso vedere l'uso in qualcosa di simile a un'interfaccia utente (ad esempio, con una lista di trascinamento di trascinamento della selezione), quando si parla di interazione di codice puro, vedo tre casi per questo:
-
iterazione. L'iterazione con un ciclo
for
utilizzandoget(i)
esize()
è costosa nella maggior parte delle implementazioni e solitamente può essere eseguita meglio coniterator()
, che è presente in ogniIterable
raccolta. -
Ricerca per indice. Questo di solito richiede una tabella di indici e una lista di lunghezza fissa, nel qual caso si otterrebbe prestazioni migliori da un array.
-
Operando sulla parte anteriore o posteriore di
List
. Questo è il motivo per cuiDeque
è stato progettato e non richiede alcuna chiamata asize()
.
Il supporto di Collections
è bello, ma l'unica cosa che ho trovato che è stata implementata in Collections
ma non Arrays
era una funzione shuffle()
, che è abbastanza semplice per un programmatore esperto da implementare (o delegare a Collections
, poiché l'overhead per gli array non primitivi non è male IMO).
Sento che tutto ciò che uno avrebbe bisogno di un List
per può essere meglio riempito da un Deque
o da un array. Ho fatto qualche ricerca per confronti, ma le uniche informazioni Ho scoperto che in realtà non discute di Deque
s o è scritto come una cosa di "Benvenuto in programmazione" e non offre un confronto diretto dei casi d'uso. Ho controllato il mio codice negli ultimi anni e non ho trovato List
s al di fuori degli elementi dell'interfaccia utente; Di solito uso un Set
o un BlockingQueue
per la memorizzazione di dati a lunghezza variabile.