2013-02-13 3 views
16

Gibt es in den folgenden Gruppen von Elementabrufvorgängen in LinkedList Unterschiede zwischen den verschiedenen Methoden?Java LinkedList - Unterschiede zwischen Abrufoperationen

Rückkehr null + Entfernen Operationen:poll(), pollFirst().

Rückgabe null + Operationen nicht entfernen:peek(), peekFirst().

Werfen Ausnahme + Entfernen von Operationen:pop(), remove(), removeFirst().

Auslösende Ausnahme + Operationen nicht entfernen:element(), getFirst().

Ähnliche Duplikate existieren in Einfügemethoden.

Wenn es keinen solchen Unterschied gibt, würde ich erwarten, dass es im Javadoc der Methoden erwähnt wird (etwas wie das gute alte "Das ist genau wie das Anrufen ..."). Ist es nur eine schlampige Dokumentation, oder fehlt mir etwas?

+0

Ich verstehe nicht, was Sie fragen. Ist das Javadoc nicht klar? Es sagt, was jede dieser Methoden ganz klar macht. Was ist das Problem? –

+1

Wenn es eine Duplizierung gibt, dann weil 'LinkedList' mehrere Basisschnittstellen implementiert (' Deque', 'List',' Queue' usw.) –

+0

@JBNizet - Das Javadoc ist klar, aber die Duplizierung ist immer noch da. @OliCharlesworth - Die meisten Duplikate sind in 'Deque', was bedeutet, dass ich die Frage nach' Deque' selbst gestellt haben sollte. – Elist

Antwort

12

Es gibt keinen Unterschied zwischen ihnen, und es ist auch in der Dokumentation aufgeführt, aber Sie müssen einige rekursive Suche tun, um dorthin zu gelangen.

LinkedList implementiert zwei Schnittstellen - Queue und Deque. Und Deque erstreckt sich von Queue.

Jetzt hat Deque die Methode - Deque#pollFirst() definiert und die Methode - Queue#poll() geerbt.

Also, LinkedList hat im Grunde diese beiden Methoden für die beiden Schnittstellen definiert, die es implementiert.

Diese Schnittstelle erweitert die Queue-Schnittstelle:

Und über die Ähnlichkeit zwischen diesen beiden Methoden ist es in der Dokumentation von Deque als aufgeführt. Wenn ein Deque als -Warteschlange verwendet wird, führt dies zu FIFO-Verhalten (First-In-First-Out). Die Elemente werden am Ende der Deque hinzugefügt und von Anfang an entfernt. Die Methoden aus der Warteschlange-Schnittstelle übernommen werden genau äquivalent zu Deque Methoden, wie in der folgenden Tabelle angegeben:

Und es ist eine Tabelle, welche die Methoden der Klasse Queue und die äquivalente Deque Methode auflistet. Siehe Deque#poll(), Deque#peek() für z.B. Sie listen die äquivalente Methode deutlich auf.

0

Der Unterschied zwischen ihnen ist die Version, mit der sie veröffentlicht wurden und die Schnittstellen, die LinkedList implementiert.

Beispiel basierend auf poll() und pollFirst():

LinkedList wurde zusammen mit Java 1.2 freigegeben.

Seit 1.5 LinkedList implementiert die Queue-Schnittstelle, die

public E poll() 

Seit 1.6 LinkedList Schnittstelle implementiert die Deque hat, die

hat
public E pollFirst() 

edit: Es ist wichtig, um die ältere Implementierung aufgrund einer Abwärtskompatibilität beizubehalten.

+1

Danke, das ist wahrscheinlich richtig. Die einzige Ausnahme ist das Paar removeFirst() und pop(), wo das Javadoc sagt "Diese Methode entspricht removeFirst()". – Elist

+0

Rückwärtskompatibilität ist nicht der Grund. Der Grund dafür ist, dass 'LinkedList' mehrere Schnittstellen implementiert. –

+0

@Elist. Beachten Sie, dass der Grund in der Antwort nicht korrekt ist. Nur FYK –

0

Ihr Recht, es ist schlechte Dokumentation oder so etwas.

peek() Ruft den Kopf (erstes Element) dieser Liste ab, entfernt ihn aber nicht.

peekFirst() Ruft das erste Element dieser Liste ab oder löscht es, oder gibt null zurück, wenn diese Liste leer ist.

Dies ist, was es sagt und ich bin hier in meinem Java-Buch gelesen, dass der Kopf der erste Gegenstand in einer Liste ist.