2016-04-21 6 views
1

In diesem Question las ich folgendes:Gibt es einen Fall, wenn eine Stack- oder Queue-Implementierung mit ArrayList eine bessere, schnellere Performance bietet als eine LinkedList, die in Java implementiert ist?

Wenn Sie sich vergleichsweise wenige Operationen zu tun, dh weniger als 1000 oder so enqueue/entnimmt insgesamt, dann würde ein Array schneller sein, weil es im Speicher angrenzt.

Meine Frage ist: Wie Caching eine ArrayList in Java funktioniert? Gibt es Fälle, wenn eine ArrayList-implementierte Queue oder Stack besser funktioniert als eine in Java implementierte LinkedList?

Antwort

1

Ist eine ArrayList-implementierte Queue oder Stack besser als eine LinkedList in Java implementiert?

Wenn die Warteschlange fast immer leer ist oder mit 1 Element ist Arraylist schneller und erzeugt weniger Abfall (dh keine)

Wenn Sie einen schnellen Verbraucher haben, wird es fast immer der Verbraucher, was immer der Produzent produziert wie es es produziert. Dies bedeutet, dass sich normalerweise 0 oder 1 Elemente in der Warteschlange befinden. Unter diesen Bedingungen ist ArrayList schneller, da es keine Objekte erzeugt oder Müll erzeugt.

BTW ArrayDeque ist eine bessere Wahl, da dies auch dann gut funktioniert, wenn mehr als ein Element vorhanden ist.

Wie Caching eine ArrayList in Java funktioniert?

Es gibt nichts Besonderes an der Art, wie die CPU Zugriffe auf eine ArrayList zwischenspeichert.

+0

Wenn eine Queue oder ein Stack fast leer ist oder mit einem Element, können wir das als Arraylist bezeichnen, oder was immer wir wollen, weil wir einfach ein Array hinzufügen und entfernen, deren Reihenfolge irrelevant ist. Habe ich Recht oder verpasse ich etwas? – codeme

+1

@codeme Es ist mehr der Punkt, an dem ArrayList langsam ist, außer beim Hinzufügen/Entfernen des letzten Elements, in diesem Fall ist es schneller als Linkedlist. –