40

创建这两个对象时有什么区别

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

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

test和之间的实际区别是test2什么?两者都是LinkedList吗?是否存在性能差异或使用其中一种的原因?

4

3 回答 3

58

您编写的两个语句都构造了一个LinkedList<String>对象来保存字符串列表,然后将其分配给一个变量。区别在于变量的类型。

通过将 分配给LinkedList<String>类型的变量Queue<String>,您只能访问接口LinkedList中可用的方法Queue<String>,其中包括对入队和出队元素的支持。如果您需要编写一个程序,该程序将队列用于各种操作并希望通过使用链表来实现该队列,这将非常有用。

通过将 分配给LinkedList<String>类型的变量List<String>,您只能访问接口LinkedList中可用的方法List<String>,这是维护元素序列的正常操作。例如,如果您需要处理可以在任何地方增长和缩小的元素列表,这将很有用。

简而言之,这两行创建了相同的对象,但打算以不同的方式使用它们。一个说它需要一个由链表支持的队列,而另一个说它需要一个由链表支持的通用元素序列。

希望这可以帮助!

于 2013-03-25T05:13:16.020 回答
5

在这两种情况下,您都在实例化LinkedList.

不同之处在于您用来引用这些实例的变量的类型。

test是 类型Queue并且test2是 类型List。根据变量的类型,您只能调用在该特定类型上指定的方法。我认为这对您的情况很重要。

在性能方面,它将是相同的,因为您在这两种情况下使用的实际实现是相同的 ( LinkedList)。

于 2013-03-25T05:16:47.057 回答
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

我不确定性能,但我想它应该没有什么不同,因为对象实现很常见。

于 2013-03-25T05:16:34.887 回答