问题标签 [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.
java - Java ArrayDeque push() 似乎添加到堆栈的前/尾 [潜在错误]
我正在研究 leetcode 问题 84,最大矩形。在测试时,我遇到了这种奇怪的情况,堆栈似乎添加到尾部。我使用打印语句和迭代器对象确认了这一点。
测试用例是:[4,2,0,3,2,5]
数组中倒数第二个元素 2 似乎被推到尾部,正好在 0 之下(它应该被推到顶部。在我的打印语句中,val:x gap:y 在弹出元素时出现,xyz当一个元素被推入并添加时出现:x 是迭代器打印的内容。整个堆栈在数组的每个增量处被迭代。代码在这里。我确定只是发布这样的代码是不好的礼仪,所以随时提供一些批评。
java - 有没有办法为 ArrayDeque 实现 O(1) 时间复杂度的检索 (get())?
我正在尝试将 ArrayDeque 用于一个应该对 addfront、addback 和检索具有 O(1) 时间复杂度的类。我只能想到使用 toArray() 进行检索,不幸的是 O(n)。有没有办法为 ArrayDeque 实现 O(1) 的检索方法?
java - 使用arraydeque实现MonitonicQueue
我正在使用Deque
来实现单调队列。我知道这Deque
可以由ArrayDeque
和创建LinkedList
。这是我构建的 Monotonic 类:
但是,问题出现在void push(int n)
方法中,即删除所有为 的元素< n
,然后将其添加n
到尾部的队列中。我在一个方法中初始化了一个变量window
,然后尝试推送一个元素来更新这个单调队列。
但它甚至无法插入第一个元素。奇怪的是,当我在构造函数中使用第二种方式时,说LinkedList<>
而不是ArrayDeque
,它工作得很好,即可以成功插入3。
我想知道为什么一种方法有效,而另一种方法无效。这里发生了什么?谢谢!
java - ArrayDeque 的 Stack 和同步装饰器之间的区别
我想有 LIFO 效果,我希望它是同步的。有谁知道我应该使用这两种实现中的哪一种?谷歌搜索了一段时间,仍然没有好的答案。
底线:有什么区别,为什么使用一个而不是另一个,为什么说它偏爱arrayDequeue?
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
?每次大小超过容量时,都会将旧元素复制到新数组中?我可以说ArrayDequeue
and ArrayList
is array的内部实现(正如他们的名字所说)吗?只是调整大小不同?
java - ArrayDeque 操作
我有一些空闲时间并试图了解 ArrayDeque 在内部是如何工作的。我在这里阅读了几篇文章和问题/答案,我想我已经很接近了。我使用调试来遵循工作流程,有些事情让我很困扰。我创建了一个空的双端队列,它产生了一个包含 16 个为空元素的数组。当我使用addFirst时,它在数组的第 16 位添加了一个元素,并在第 0 位的开头添加了addLast。我错过了什么,请您分享一些知识或指出正确的方向,以便我可以完全理解正在发生的事情窗帘后面。提前致谢!
java - ArrayDeque 在删除/添加时是否有移动元素的开销?
我遇到了这个问题,第一个(接受的)答案说这部分:
ArrayDeque 没有 LinkedList 没有的节点分配开销,也没有 ArrayList 具有的将数组内容移到 remove 时的开销。
我同意节点开销,但不同意关于移动元素的部分。我知道StackOverflow也可能有错误的信息,但是这个答案有很多票,所以一定是我的无知。所以有人可以告诉我这个:
HowcomeArrayDeque
没有移动元素的开销?ArrayDeque
(如其名称所述)仍然使用ARRAY。这意味着它与任何其他数组一样工作。如果我有 10 个元素并且我删除了head,那么这 9 个元素必须向左移动 1 个位置。这是LinkedList
没有的开销——它只是改变了对prev和next的引用。我对么?
总而言之,不要ArrayList
和ArrayDeque
工作方式一样吗?如果结构发生变化,它们都会转移元素。唯一的区别是ArrayList
可以访问任意位置,同时ArrayDeque
作为FIFO/LIFO工作。如果我错了,有人可以纠正我吗?我不想在这里学错。
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
java - java.util.Stack 和 java.util.ArrayDeque 中的 grow() 方法之间的区别
当堆栈已满时,我遇到了 grow() 方法,但是当我看到 arraydeque 中的 grow() 函数存在差异时,我想知道实际差异是什么。
有谁知道这个问题的答案?
java - Android中如何使用ArrayDeque给RecyclerView设置数据
我一直在开发音乐应用程序。在播放队列中,我需要向两端添加数据(下一个播放,稍后播放),因为我使用了 Array Deque 并且在 RecyclerView Adapter 内部我尝试使用数组 deque 本身,但我收到错误
这是我的适配器类
}
这是具有 RecycleView 的 Activity
}
当我在 ArrayDeque 为空时打开 PlayQueueActivity 时,它会因为没有数据而打开,但是如果我添加数据并打开它会使应用程序崩溃
任何帮助将不胜感激,还是我试图做一些不可能的事情?如果是这样,我该如何以任何可能的方式实现它?
谢谢你 !