为什么ArrayList没有实现Queue?

时间:2017-01-15 19:33:39

标签: java oop arraylist collections

也许这很傻,但我必须知道答案。我正在试着看它的源代码,并没有看到作者在Queue中实现LinkedList的任何理由,但决定不对ArrayList做同样的事,而是他们创建了单独的类ArrayDeque

2 个答案:

答案 0 :(得分:5)

interface Queue要求add将项目添加到Queue的末尾,removeQueue的开头添加元素。

(伪代码)

Queue<String> q = ...
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]

现在;使用ArrayListremove操作将为O(n) - 我认为API设计人员认为这种性能是不可接受的。

removeO(n),因为它需要重新索引整个列表 - B现在是0C现在是1LinkedList没有这个问题,因为它使用链表数据结构;它只是删除头节点并将该节点的子节点设置为新的节点。

ArrayDeque是另一种在O(1)中支持此设计的设计 - 因此它不是List

答案 1 :(得分:1)

最有可能的原因是它作为Queue不具备高性能,因为在Queue的情况下添加(以及从O(N)移除)开头是O(1)操作ArrayDeque。另一方面,List是一种不同的设计,因为它不是document.getElementById('mps').innerHTML = "Memes per second: " + ((p + d + s + sk) * multiplier) + " "; var multiplier = 1; var memeCount = 0; var pepe = 1; var datboi = 0; var sanic = 0; var skeleton = 0; var p = pepe * 2 var d = datboi * 10 var s = sanic * 50 var sk = skeleton * 300,因此不需要提供随机访问。