2013-02-13 9 views
16

Esistono differenze tra i diversi metodi in ciascuno dei seguenti gruppi di operazioni di recupero elementi in LinkedList?Java LinkedList - differenze tra le operazioni di recupero

Ritorno operazioni null + rimozione:poll(), pollFirst().

Restituzione di null + non operazioni di rimozione:peek(), peekFirst().

lancio di eccezioni + operazioni di rimozione:pop(), remove(), removeFirst().

eccezione di lancio + non rimozione operazioni:element(), getFirst().

Duplicazioni simili sono presenti nei metodi di inserimento.

Se non c'è una tale differenza, mi aspetterei che venga menzionata nel javadoc dei metodi (qualcosa come il buon vecchio "Questo è esattamente come chiamare ..."). È solo una documentazione sciatta, o mi manca qualcosa?

+0

Non capisco cosa stai chiedendo. Non è chiaro il javadoc. Dice ciò che ciascuno di questi metodi fa abbastanza chiaramente. Qual è il problema? –

+1

Se c'è una duplicazione, è perché 'LinkedList' sta implementando più interfacce di base (' Deque', 'List',' Queue', ecc.) –

+0

@JBNizet - Il javadoc è chiaro, ma la duplicazione è ancora lì. @OliCharlesworth - La maggior parte delle duplicazioni sono all'interno di 'Deque', il che implica che avrei dovuto porre la domanda su' Deque' stessa. – Elist

risposta

12

Non c'è alcuna differenza tra di loro, ed è elencato anche nella documentazione, ma devi fare qualche ricerca ricorsiva per arrivarci.

LinkedList implementa due interfacce - Queue e Deque. E Deque si estende da Queue.

Ora, Deque ha definito il metodo - Deque#pollFirst() e ha ereditato il metodo - Queue#poll().

Quindi, LinkedList ha fondamentalmente questi due metodi definiti per le due interfacce implementate.

E circa la somiglianza tra questi due metodi, è elencato nella documentazione di Deque come:

Questa interfaccia estende l'interfaccia della coda. Quando una deque viene utilizzata come coda , i risultati del comportamento FIFO (First-In-First-Out). Gli elementi sono aggiunti alla fine del deque e rimossi dall'inizio. I metodi ereditati dall'interfaccia coda sono esattamente equivalenti a Deque metodi come indicato nella tabella seguente:

e v'è una tabella che elenca i metodi della classe Queue e il metodo equivalente Deque. Vedere Deque#poll(), Deque#peek() per es. Elenca chiaramente il metodo equivalente.

0

La differenza tra loro è la versione con cui sono stati rilasciati e le interfacce implementate da LinkedList.

esempio a base di poll() e pollFirst():

LinkedList è stato rilasciato insieme a Java 1.2.

Da 1,5 LinkedList implementa l'interfaccia coda, che ha

public E poll() 

Da 1,6 LinkedList implementa l'interfaccia Deque, che ha

public E pollFirst() 

modifica: E ' importante mantenere l'implementazione precedente a causa di una compatibilità con le versioni precedenti.

+1

Grazie, probabilmente ha ragione. L'unica eccezione è la coppia removeFirst() e pop() dove javadoc dice "Questo metodo è equivalente a removeFirst()". – Elist

+0

La retrocompatibilità non è la ragione. Il motivo è che 'LinkedList' implementa più interfacce. –

+0

@Elenco. Si noti che il motivo nella risposta non è corretto. Solo FYK –

0

Il tuo diritto è una cattiva documentazione o qualcosa del genere.

peek() Recupera, ma non rimuove, la testina (primo elemento) di questo elenco.

peekFirst() Recupera, ma non rimuove, il primo elemento di questo elenco o restituisce null se questo elenco è vuoto.

Questo è quello che dice e nel mio libro Java sono letto che la testa è il primo elemento in una lista.