Разница в LinkedList, очередь и список
В чем разница при создании этих двух объектов
Queue<String> test = new LinkedList<String>();
и
List<String> test2 = new LinkedList<String>();
Каковы фактические различия между test
и test2
? Оба из них LinkedList
? Существуют ли различия в производительности или причины использования одного над другим?
Ответы
Ответ 1
Два написанных вами оператора строят объект LinkedList<String>
для хранения списка строк, а затем назначают его переменной. Разница заключается в типе переменной.
Назначая LinkedList<String>
переменной типа Queue<String>
, вы можете получить доступ только к методам в LinkedList
, которые доступны в интерфейсе Queue<String>
, который включает поддержку элементов enqueuing и dequeuing. Это было бы полезно, если бы вам нужно было написать программу, которая использовала очередь для различных операций, и захотела реализовать эту очередь, используя связанный список.
Назначая LinkedList<String>
переменной типа List<String>
, вы можете получить доступ только к методам в LinkedList
, которые доступны в интерфейсе List<String>
, которые являются нормальными операциями для поддержания последовательности элементов. Это было бы полезно, например, если вам нужно было обработать список элементов, которые могли бы расти и сокращаться где угодно.
Короче говоря, две линии создают один и тот же объект, но намерены использовать их по-разному. Один говорит, что ему нужна очередь, поддерживаемая связанным списком, в то время как другая говорит, что ей нужна общая последовательность элементов, поддерживаемых связанным списком.
Надеюсь, это поможет!
Ответ 2
Я чувствую, что оба они почти одинаковы, за исключением того, какой тип методов вы собираетесь раскрывать. Поскольку 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
).