为什么是Queue一个界面,但其他人喜欢Stack和 ArrayList是类?
我知道创建接口(interface)是为了让客户可以实现它们并添加他们自己的方法,而对于类,如果每个客户都需要他们的方法,它将变得庞大而臃肿。
...还是我在这里遗漏了什么?
最佳答案
Queue
可以用多种方式实现,List
或 Set
也可以。它们都只是为不同类型的集合指定一个契约。
然而,ArrayList
是 List
的特定实现,用于在内部使用数组来存储元素。 LinkedList
也是 List
的一个实现,它使用一系列相互连接的节点,即 doubly linked list。 .同样,TreeSet
和 HashMap
分别是集合和映射的特定实现。
现在,Stack
在这里是一个奇怪的例子,特别是因为它是旧版本 Java 的遗留类。你真的不应该再使用 Stack
了;相反,您应该使用其现代等效项 ArrayDeque
. ArrayDeque
是 Deque
(双端队列)的实现,它在内部使用数组进行存储(这正是 Stack
所做的) ). Deque
支持 Stack
的所有操作,如 pop
、push
等。 的其他实现code>Deque
包括 LinkedList
,正如其他人所提到的,尽管这与 Stack
不同,因为它底层不是数组,而是双向链表:-p
现在,有很多Queue
的实现,以及许多不同类型的Queue
。你不仅有 BlockingQueue
(通常用于生产者-消费者),其常见实现包括 LinkedBlockingQueue
和 ArrayBlockingQueue
,还有 TransferQueue
等等。我离题了……您可以在相关的 Java Tutorial 中阅读有关集合 API 的更多信息。 .
关于java.util 包 - 类与接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12238678/