当我将类的实例分配给接口变量时,这意味着什么



我想知道是否:

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

是一个使用列表方法的列表,但它是使用 ArrayList 构建的?

它的行为是什么?

无法完全理解我是否正在使用这段代码创建队列或链接列表,

Queue q = new LinkedList();

ArrayList 实现 List 接口。类似地,LinkedList 实现队列接口。这意味着:

  • ArrayList承诺它将拥有它需要的所有方法行为类似于列表
  • LinkedList承诺它将拥有像队列一样运行所需的所有方法

因为这两个类都实现了这些承诺(它们实现了接口),所以Java可以将ArrayList视为List。类似地,它可以将 LinkedList 视为队列。

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

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

这两种数据结构在计算复杂性、内存要求和速度方面有所不同。您可以在此处找到更多信息。

最新更新