问题标签 [arraydeque]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
122 浏览

java - Java ArrayDeque push() 似乎添加到堆栈的前/尾 [潜在错误]

我正在研究 leetcode 问题 84,最大矩形。在测试时,我遇到了这种奇怪的情况,堆栈似乎添加到尾部。我使用打印语句和迭代器对象确认了这一点。

测试用例是:[4,2,0,3,2,5]

数组中倒数第二个元素 2 似乎被推到尾部,正好在 0 之下(它应该被推到顶部。在我的打印语句中,val:x gap:y 在弹出元素时出现,xyz当一个元素被推入并添加时出现:x 是迭代器打印的内容。整个堆栈在数组的每个增量处被迭代。代码在这里。我确定只是发布这样的代码是不好的礼仪,所以随时提供一些批评。

0 投票
3 回答
535 浏览

java - 有没有办法为 ArrayDeque 实现 O(1) 时间复杂度的检索 (get())?

我正在尝试将 ArrayDeque 用于一个应该对 addfront、addback 和检索具有 O(1) 时间复杂度的类。我只能想到使用 toArray() 进行检索,不幸的是 O(n)。有没有办法为 ArrayDeque 实现 O(1) 的检索方法?

0 投票
0 回答
44 浏览

java - 使用arraydeque实现MonitonicQueue

我正在使用Deque来实现单调队列。我知道这Deque可以由ArrayDeque和创建LinkedList。这是我构建的 Monotonic 类:

但是,问题出现在void push(int n)方法中,即删除所有为 的元素< n,然后将其添加n到尾部的队列中。我在一个方法中初始化了一个变量window,然后尝试推送一个元素来更新这个单调队列。

但它甚至无法插入第一个元素。奇怪的是,当我在构造函数中使用第二种方式时,说LinkedList<>而不是ArrayDeque,它工作得很好,即可以成功插入3。

我想知道为什么一种方法有效,而另一种方法无效。这里发生了什么?谢谢!

0 投票
1 回答
90 浏览

java - ArrayDeque 的 Stack 和同步装饰器之间的区别

我想有 LIFO 效果,我希望它是同步的。有谁知道我应该使用这两种实现中的哪一种?谷歌搜索了一段时间,仍然没有好的答案。

底线:有什么区别,为什么使用一个而不是另一个,为什么说它偏爱arrayDequeue?

0 投票
1 回答
427 浏览

java - 调整 ArrayDeque 的大小

引用:Default initial capacity of ArrayDeque is 16. It will increase at a power of 2 (24, 25, 26 and so on) when size exceeds capacity.

这是否意味着它的行为类似于ArrayList?每次大小超过容量时,都会将旧元素复制到新数组中?我可以说ArrayDequeueand ArrayListis array的内部实现(正如他们的名字所说)吗?只是调整大小不同?

0 投票
1 回答
56 浏览

java - ArrayDeque 操作

我有一些空闲时间并试图了解 ArrayDeque 在内部是如何工作的。我在这里阅读了几篇文章和问题/答案,我想我已经很接近了。我使用调试来遵循工作流程,有些事情让我很困扰。我创建了一个空的双端队列,它产生了一个包含 16 个为空元素的数组。当我使用addFirst时,它在数组的第 16 位添加了一个元素,并在第 0 位的开头添加了addLast。我错过了什么,请您分享一些知识或指出正确的方向,以便我可以完全理解正在发生的事情窗帘后面。提前致谢!

0 投票
1 回答
176 浏览

java - ArrayDeque 在删除/添加时是否有移动元素的开销?

我遇到了这个问题,第一个(接受的)答案说这部分:

ArrayDeque 没有 LinkedList 没有的节点分配开销,也没有 ArrayList 具有的将数组内容移到 remove 时的开销。

我同意节点开销,但不同意关于移动元素的部分。我知道StackOverflow也可能有错误的信息,但是这个答案有很多票,所以一定是我的无知。所以有人可以告诉我这个:

HowcomeArrayDeque没有移动元素的开销?ArrayDeque(如其名称所述)仍然使用ARRAY。这意味着它与任何其他数组一样工作。如果我有 10 个元素并且我删除了head,那么这 9 个元素必须向左移动 1 个位置。这是LinkedList没有的开销——它只是改变了对prevnext的引用。我对么?

总而言之,不要ArrayListArrayDeque工作方式一样吗?如果结构发生变化,它们都会转移元素。唯一的区别是ArrayList可以访问任意位置,同时ArrayDeque作为FIFO/LIFO工作。如果我错了,有人可以纠正我吗?我不想在这里学错。

0 投票
2 回答
235 浏览

java - ArrayList VS ArrayDeque 在移动元素中?

我试着问了一个类似的问题,但我没有得到任何令人满意的答案。这个问题背后的动机是这个问题的第一个(接受的)答案,粗略地说:

ArrayDeque 没有像 ArrayList 那样移动内容的开销。

在我看来,他们应该采取同样的行动。唯一的区别是它ArrayList是从List接口实现的,这意味着它可以访问任意索引。另一方面,ArrayDeque是从Queue接口实现的,它以LIFO/FIFO方式工作。

我想指出的是,它们都使用AN ARRAY来存储元素。这意味着如果他们都有一个包含这些元素的数组:

,arraylist.remove(0);并且arraydeque.poll();应该都删除值为 2 的first/head元素。

现在我的大问题。在这两种情况下,所有左边的数字(4、6、8、10)是否都向左移动了 1 个插槽?当我们进行任何结构修改时,它们移动元素的方式ArrayList和方式有什么区别吗?ArrayDeque

0 投票
1 回答
63 浏览

java - java.util.Stack 和 java.util.ArrayDeque 中的 grow() 方法之间的区别

当堆栈已满时,我遇到了 grow() 方法,但是当我看到 arraydeque 中的 grow() 函数存在差异时,我想知道实际差异是什么。

有谁知道这个问题的答案?

0 投票
0 回答
74 浏览

java - Android中如何使用ArrayDeque给RecyclerView设置数据

我一直在开发音乐应用程序。在播放队列中,我需要向两端添加数据(下一个播放,稍后播放),因为我使用了 Array Deque 并且在 RecyclerView Adapter 内部我尝试使用数组 deque 本身,但我收到错误

这是我的适配器类

}

这是具有 RecycleView 的 Activity

}

当我在 ArrayDeque 为空时打开 PlayQueueActivity 时,它会因为没有数据而打开,但是如果我添加数据并打开它会使应用程序崩溃

任何帮助将不胜感激,还是我试图做一些不可能的事情?如果是这样,我该如何以任何可能的方式实现它?

谢谢你 !