2013-03-25 10 views
20

Qual è la differenza durante la creazione di questi due oggettiDifferenza di LinkedList, coda vs lista

Queue<String> test = new LinkedList<String>(); 

e

List<String> test2 = new LinkedList<String>(); 

Quali sono le differenze effettive tra test e test2? Entrambi sono LinkedList? Ci sono differenze di prestazioni o ragioni per usare l'una sull'altra?

+0

@ BheshGurung- Sei sicuro?Sono abbastanza sicuro che entrambi siano codici Java legali. – templatetypedef

+1

Non vengono compilati perché mancano a(), non perché l'assegnazione sarebbe illegale :) – Affe

+0

ok() è stato corretto –

risposta

33

Le due istruzioni che hai scritto costruiscono un oggetto LinkedList<String> per contenere un elenco di stringhe, quindi assegnarlo a una variabile. La differenza è nel tipo di variabile.

Assegnando la LinkedList<String> a una variabile di tipo Queue<String>, si può accedere solo metodi nella LinkedList che sono disponibili nell'interfaccia Queue<String>, che include il supporto per l'accodamento ed elementi accodamento. Ciò sarebbe utile se fosse necessario scrivere un programma che usasse una coda per varie operazioni e volesse implementare quella coda usando un elenco collegato.

Assegnando la LinkedList<String> a una variabile di tipo List<String>, si può accedere solo metodi nella LinkedList che sono disponibili nell'interfaccia List<String>, che sono normali operazioni per mantenere una sequenza di elementi. Ciò sarebbe utile, ad esempio, se fosse necessario elaborare un elenco di elementi che potrebbero crescere e restringersi ovunque.

In breve, le due linee creano lo stesso oggetto ma intendono utilizzarle in modi diversi. Si dice che ha bisogno di una coda supportata da un elenco collegato, mentre l'altro dice che ha bisogno di una sequenza generale di elementi supportati da un elenco collegato.

Spero che questo aiuti!

3

Ritengo che entrambi siano praticamente identici, tranne che per il tipo di metodi che verranno esposti. Poiché LinkedList implementa entrambe le interfacce, la scelta di una di esse apre l'accesso ai metodi di quel tipo di interfaccia.

si prega di dare un'occhiata a questi link per le dichiarazioni di metodo dell'interfaccia

http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html http://docs.oracle.com/javase/6/docs/api/java/util/List.html

non sono sicuro circa le prestazioni, anche se credo che non dovrebbe essere diverso, come l'implementazione oggetto è comune.

3

In entrambi i casi, si sta creando un'istanza LinkedList.

La differenza sono i tipi di variabili che si utilizzano per fare riferimento a tali istanze.

test di tipo Queue e test2 di tipo List. A seconda del tipo di variabile, si ottiene solo il richiamo dei metodi specificati su quel particolare tipo. Penso che questo sia importante per la tua situazione.

Per quanto riguarda le prestazioni, sarà lo stesso, poiché l'implementazione effettiva che si sta utilizzando in entrambi i casi è la stessa (LinkedList).