也许这很愚蠢,但我必须知道答案.我抓我的头在看它的源代码,并没有看到任何理由作者实现Queue
的LinkedList
,但决定不执行相同的操作ArrayList
,而不是他们所创建单独的类ArrayDeque
.
的interface Queue
要求,add
增加了项目的结束Queue
,并remove
采取从的开始元素Queue
.
(伪代码)
Queueq = ... q.add("A") q.add("B") q.add("C") //q is now [A,B,C] String a = q.remove() // a is A and q is [B, C]
现在; 使用a ArrayList
,remove
操作将是O(n)
- 我会想象API设计者认为这种性能是不可接受的.
remove
是O(n)
因为它需要重新索引整个列表 - B
现在0
和C
现在1
.LinkedList
没有这个问题,因为它使用链表数据结构; 它只是删除头节点并将该节点的子节点设置为新的头节点.
ArrayDeque
是一个不同的设计来支持这一点O(1)
- 因此它不是一个List
.