2013-03-25 14 views
20

Jaka jest różnica przy tworzeniu tych dwóch obiektówRóżnica LinkedList, kolejka vs listy

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

i

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

Jakie są rzeczywiste różnice między test i test2? Czy oba są LinkedList? Czy występują różnice w wydajności lub powody, dla których warto korzystać z jednego na drugim?

+0

@ BheshGurung- Jesteś pewien?Jestem prawie pewien, że oba te są legalne kodu Java. – templatetypedef

+1

Nie kompilują się, ponieważ brakuje im(), a nie dlatego, że zadanie byłoby nielegalne :) – Affe

+0

ok() zostało poprawione –

Odpowiedz

33

Dwie napisane przez ciebie instrukcje konstruują obiekt LinkedList<String> w celu przechowywania listy łańcuchów, a następnie przypisania do zmiennej. Różnica polega na rodzaju zmiennej.

Przypisując LinkedList<String> do zmiennej typu Queue<String>, można uzyskać dostęp tylko do metod w LinkedList, które są dostępne w interfejsie Queue<String>, która obejmuje wsparcie dla enqueuing i zdejmującą z kolejki elementy. Byłoby to przydatne, gdybyś musiał napisać program, który używał kolejki do różnych operacji i chciał zaimplementować tę kolejkę za pomocą połączonej listy.

Przypisując LinkedList<String> do zmiennej typu List<String>, można uzyskać dostęp tylko do metod w LinkedList, które są dostępne w interfejsie List<String>, które są normalne operacje utrzymania sekwencję elementów. Byłoby to użyteczne, na przykład, gdybyś potrzebował przetworzyć listę elementów, które mogłyby rosnąć i skurczyć się w dowolnym miejscu.

W skrócie, dwie linie tworzą ten sam obiekt, ale zamierzają z nich korzystać na różne sposoby. Mówi się, że potrzebuje kolejki wspieranej przez listę połączoną, podczas gdy druga mówi, że potrzebuje ogólnej sekwencji elementów popartych przez listę połączoną.

Mam nadzieję, że to pomoże!

3

Czuję, że oba są w przybliżeniu takie same, z wyjątkiem tego, jakiego rodzaju metody zamierzasz ujawnić. Ponieważ LinkedList implementuje oba interfejsy, więc wybranie jednego z nich otwiera dostęp do metod tego typu interfejsu.

proszę spojrzeć na te linki do deklaracji metody interfejsu

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

nie jestem pewien co do wydajności, chociaż myślę, że nie powinno być różne, jak realizacja obiektu jest powszechne.

3

W obu przypadkach tworzy się instancję LinkedList.

Różnica polega na typach zmiennych, których używasz w odniesieniu do tych wystąpień.

test jest typu Queue i test2 jest typu List. W zależności od typu zmiennej, można wywołać tylko metody określone dla danego typu. Myślę, że to ma znaczenie dla twojej sytuacji.

Jeśli chodzi o wydajność, to będzie takie samo, ponieważ rzeczywista implementacja, której używasz w obu przypadkach, jest taka sama (LinkedList).

Powiązane problemy