将类的实例分配给接口变量是什么意思?

时间:2019-01-03 22:39:29

标签: arrays list arraylist

我想知道是否:

List<String> s = new ArrayList<String>()

是使用list方法的列表,但它是使用ArrayList构建的吗?

它的行为是什么?

我无法完全理解是使用这段代码创建队列还是LinkedList,

Queue q = new LinkedList();

2 个答案:

答案 0 :(得分:1)

ArrayList实现List接口。同样,LinkedList实现Queue接口。那是什么意思:

  • ArrayList承诺它将拥有所需的所有方法 像列表一样
  • LinkedList承诺它将具有其像队列一样需要的所有方法

由于两个类都实现了这些承诺(它们实现了接口),因此Java可以将ArrayList视为List。同样,它可以将LinkedList视为队列。

您为什么要这样做?您可能希望能够将任何List传递到您的代码中-不在乎如何实现它。因此,您可能有一个HugeSparseList,它也实现了List,该List存储底层对象的方式完全不同。这与您的代码无关紧要-只要API相同,您的代码仍然可以使用。

答案 1 :(得分:0)

List是表示元素序列的基类。数组列表是使用内部数组并在需要时动态分配空间的特定实现。 链表是使用从一个节点指向以下节点的指针存储的一系列元素。

这两个数据结构在计算复杂度,内存需求和速度方面有所不同。 您可能会找到更多信息here