web-dev-qa-db-fra.com

Différence dans LinkedList, file d'attente vs liste

Quelle est la différence lors de la création de ces deux objets

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

et

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

Quelles sont les différences réelles entre test et test2? Les deux sont-ils LinkedList? Existe-t-il des différences de performances ou des raisons d'utiliser l'une par rapport à l'autre?

27
Kailua Bum

Les deux instructions que vous avez écrites construisent chacune un LinkedList<String> objet pour contenir une liste de chaînes, puis l'affecter à une variable. La différence réside dans le type de la variable.

En affectant le LinkedList<String> vers une variable de type Queue<String>, vous ne pouvez accéder qu'aux méthodes de LinkedList qui sont disponibles dans Queue<String> interface, qui inclut la prise en charge des éléments de mise en file d'attente et de mise en file d'attente. Cela serait utile si vous aviez besoin d'écrire un programme qui utilisait une file d'attente pour diverses opérations et que vous vouliez implémenter cette file d'attente à l'aide d'une liste liée.

En affectant le LinkedList<String> vers une variable de type List<String>, vous ne pouvez accéder qu'aux méthodes de LinkedList qui sont disponibles dans List<String> interface, qui sont des opérations normales pour maintenir une séquence d'éléments. Cela serait utile, par exemple, si vous aviez besoin de traiter une liste d'éléments susceptibles de croître et de se réduire n'importe où.

En bref, les deux lignes créent le même objet mais ont l'intention de les utiliser de différentes manières. L'un dit qu'il a besoin d'une file d'attente appuyée par une liste chaînée, tandis que l'autre dit qu'il a besoin d'une séquence générale d'éléments appuyés par une liste chaînée.

J'espère que cela t'aides!

42
templatetypedef

Dans les deux cas, vous instanciez LinkedList.

La différence réside dans les types de variables que vous utilisez pour faire référence à ces instances.

test est de type Queue et test2 est de type List. Selon le type de variable, vous ne pouvez invoquer que les méthodes spécifiées sur ce type particulier. Je pense que c'est ce qui compte pour votre situation.

En termes de performances, ce sera la même chose, car l'implémentation réelle que vous utilisez dans les deux cas est la même (LinkedList).

4
Bhesh Gurung

Je pense que les deux sont à peu près les mêmes, sauf que le type de méthodes que vous allez exposer. Comme LinkedList implémente les deux interfaces, le choix de l'une d'entre elles ouvre l'accès aux méthodes de ce type d'interface.

veuillez consulter ces liens pour les déclarations de méthode d'interface

http://docs.Oracle.com/javase/6/docs/api/Java/util/Queue.htmlhttp://docs.Oracle.com/javase/6/ docs/api/Java/util/List.html

je ne suis pas sûr de la performance, bien que je suppose que cela ne devrait pas être différent car l'implémentation de l'objet est courante.

3
Ashish Thukral