ArrayList很简单;条目从0开始,您可以在结尾添加内容(这可能会使数组变长),但列表中的条目#X始终为
backing_array[X]。
ArrayDeque会更复杂;除了必须跟踪序列的开始(因为不再保证从0开始,除非您希望进行O(N)个移位/不移位)之外,您还必须担心另一端是“空”。这种额外的复杂性是有代价的。在更常见的情况(列表)中,RTL仍然必须在双端队列中进行所有必要的检查和索引数学运算,从而无缘无故降低应用程序运行速度。条目#X变为
backing_array[start+X],并且边界检查对它们也具有额外的数学意义。
因此,除非确实需要双端队列功能,否则至少在弄乱数组时,坚持使用列表会更简单有效。



