La documentazione per ArrayDeque
dice:ArrayDeque vs ArrayList per implementare uno stack
Questa classe è probabile che sia più veloce di stack quando usato come una pila, e più veloce di LinkedList quando viene utilizzato come una coda.
non si fa menzione della differenza tra l'utilizzo di un ArrayDeque
come una pila e utilizzando un ArrayList
. È possibile utilizzare uno ArrayList
come stack come segue.
list.add(object); // push
object = list.remove(list.size() - 1); // pop
ho scoperto che quando ho usato un ArrayList
in questo modo solo, le sue prestazioni è peggio di ArrayDeque
. Che cosa spiega questa differenza? Sicuramente non possono essere solo le chiamate a size()
? Internamente, sia ArrayList
sia ArrayDeque
vengono implementati utilizzando un Object[]
che viene sostituito da un array più grande quando richiesto, quindi sicuramente le prestazioni dovrebbero essere all'incirca le stesse?
buona spiegazione qui - http : //stackoverflow.com/questions/6129805/what-is-the-fastest-java-collection-with-the-basic-functionality-of-a-ueue –
Misurare una differenza di prestazione presumibilmente piccola in Java è estremamente difficile fare bene. E ArrayDeque è comunque un'astrazione migliore di una ArrayList, poiché offre direttamente metodi push e pop. –
@JBNizet Sono d'accordo. Userei sempre 'ArrayDeque'. Sono solo interessato a capire cos'è un 'ArrayDeque'. Come può supportare l'inserimento e la rimozione rapida a entrambe le estremità e tuttavia battere i tipi di dati che non supportano questo? –