创建这两个对象时有什么区别
Queue<String> test = new LinkedList<String>();
和
List<String> test2 = new LinkedList<String>();
test
和test2
之间的实际差异是什么?他们俩都LinkedList
?是否存在使用其中一个的性能差异或原因?
答案 0 :(得分:41)
您编写的两个语句构造一个LinkedList<String>
对象来保存字符串列表,然后将其分配给变量。区别在于变量的类型。
通过将LinkedList<String>
分配给Queue<String>
类型的变量,您只能访问LinkedList
界面中可用的方法,其中包括支持用于排队和出列元素。如果您需要编写一个使用队列进行各种操作并希望使用链表实现该队列的程序,这将非常有用。
通过将Queue<String>
分配给LinkedList<String>
类型的变量,您只能访问List<String>
接口中可用的LinkedList
接口中的方法,这些方法是正常的维护一系列元素的操作。例如,如果您需要处理可在任何地方增长和缩小的元素列表,这将非常有用。
简而言之,这两行创建了相同的对象,但打算以不同的方式使用它们。一个说它需要一个由链表支持的队列,而另一个说它需要一个由链表支持的一般元素序列。
希望这有帮助!
答案 1 :(得分:4)
在这两种情况下,您都要实例化LinkedList
。
区别在于您用来引用这些实例的变量类型。
test
的类型为Queue
,test2
的类型为List
。根据变量的类型,您只能调用在该特定类型上指定的方法。我认为这对你的情况很重要。
在性能方面,它将是相同的,因为您在两种情况下使用的实际实现都是相同的(LinkedList
)。
答案 2 :(得分: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
我不确定性能,但我认为它应该不同,因为对象实现很常见。