【发布时间】:2021-02-27 02:56:44
【问题描述】:
我试着问了一个类似的问题,但我没有得到任何令人满意的答案。这个问题背后的动机是this question 的第一个(接受的)答案,粗略地说:
ArrayDeque 没有像 ArrayList 那样移动内容的开销。
在我看来,他们应该采取同样的行动。唯一的区别是ArrayList 是从List 接口实现的,这意味着它可以访问任何任意索引。另一方面,ArrayDeque 是从Queue 接口实现的,它以 LIFO/FIFO 的方式工作。
我要指出的是,它们都使用 AN ARRAY 来存储元素。意思是如果他们都有一个包含这些元素的数组:
2, 4, 6, 8, 10
,执行arraylist.remove(0); 和arraydeque.poll(); 都应该删除值为2 的first/head 元素。
现在我的大问题。在这两种情况下,所有左边的数字(4、6、8、10)是否都向左移动了 1 个插槽? ArrayList 和 ArrayDeque 在我们进行任何结构修改时它们移动元素的方式有什么区别吗?
【问题讨论】:
-
推荐你了解数组双端队列的实际工作原理!!参见例如Introduction to the Java ArrayDeque(Baeldung)、Circular array(GeeksforGeeks)、Circular buffer(维基百科)、What is actually a circular array and representation(计算机Science Stack Exchange) 等 --- 他们都有漂亮的图片来帮助你理解。
标签: java list arraylist queue arraydeque