也许这很傻,但我必须知道答案。我正在试着看它的源代码,并没有看到作者在Queue
中实现LinkedList
的任何理由,但决定不对ArrayList
做同样的事,而是他们创建了单独的类ArrayDeque
。
答案 0 :(得分:5)
interface Queue
要求add
将项目添加到Queue
的末尾,remove
从Queue
的开头添加元素。
(伪代码)
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]
现在;使用ArrayList
,remove
操作将为O(n)
- 我认为API设计人员认为这种性能是不可接受的。
remove
为O(n)
,因为它需要重新索引整个列表 - B
现在是0
而C
现在是1
。 LinkedList
没有这个问题,因为它使用链表数据结构;它只是删除头节点并将该节点的子节点设置为新的节点。
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
,因此不需要提供随机访问。