2013-03-25 3 views
20

Что разница при создании этих двух объектовРазница в LinkedList, очереди против списка

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

и

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

Каковы реальные различия между test и test2? Оба они являются LinkedList? Существуют ли различия в производительности или причины использования одного над другим?

+0

@ BheshGurung - Вы уверены?Я уверен, что оба из них - это законный Java-код. – templatetypedef

+1

Они не компилируются, потому что им не хватает(), а не потому, что назначение было бы незаконным :) – Affe

+0

ok() был исправлен –

ответ

33

Два написанных вами утверждения построят объект LinkedList<String>, чтобы сохранить список строк, а затем назначить его переменной. Разница заключается в типе переменной.

Назначив LinkedList<String> переменного типа Queue<String>, вы можете получить доступ только методов в LinkedList, которые доступны в интерфейсе Queue<String>, который включает в себя поддержку enqueuing и извлечение из элементов. Это было бы полезно, если бы вам нужно было написать программу, которая использовала очередь для различных операций, и захотела реализовать эту очередь, используя связанный список.

Назначив LinkedList<String> переменного типа List<String>, вы можете получить доступ только методы в LinkedList, которые доступны в интерфейсе List<String>, которые являются обычными операциями для поддержания последовательности элементов. Это было бы полезно, например, если вам нужно было обработать список элементов, которые могли бы расти и сокращаться где угодно.

Короче говоря, две линии создают один и тот же объект, но намерены использовать их по-разному. Один говорит, что ему нужна очередь, поддерживаемая связанным списком, в то время как другая говорит, что ей нужна общая последовательность элементов, поддерживаемых связанным списком.

Надеюсь, это поможет!

3

Я чувствую, что оба они почти одинаковы, за исключением того, что тип методов вы собираетесь раскрывать. Поскольку LinkedList реализует оба интерфейса, выбор одной из них открывает доступ к методам этого типа интерфейса.

, пожалуйста, посмотрите на эти ссылки для объявлений методов интерфейса

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

Я не уверен, о производительности, хотя я предполагаю, что это не должно быть иначе, как реализация объекта является общим.

3

В обоих случаях вы создаете экземпляр LinkedList.

Разница заключается в типах переменных, которые вы используете для обозначения этих экземпляров.

test имеет тип Queue и test2 имеет тип List. В зависимости от типа переменной вы можете вызвать только те методы, которые указаны в этом конкретном типе. Я думаю, это важно для вашей ситуации.

Производительность, это будет то же самое, потому что фактическая реализация, которую вы используете в обоих случаях, одинакова (LinkedList).

Смежные вопросы