关于Java库的一个非常简单快速的问题:是否有一个现成的类,它实现了Queue一个固定的最大大小 - 即它总是允许添加元素,但它会默默地删除头元素以容纳新添加元素的空间.
当然,手动实现它是微不足道的:
import java.util.LinkedList;
public class LimitedQueue<E> extends LinkedList<E> {
private int limit;
public LimitedQueue(int limit) {
this.limit = limit;
}
@Override
public boolean add(E o) {
super.add(o);
while (size() > limit) { super.remove(); }
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,Java stdlibs中没有标准的实现,但可能是Apache Commons中的那个或类似的东西?
我正在计算一个algortihm的大量可能的结果组合.要对这些组合进行排序,我使用双倍值对它们进行评级,并将它们存储在PriorityQueue中.目前,该队列中有大约20万个项目,这几乎是内存集成.实际上,我只需要说出列表中所有项目中最好的1000或100.所以我开始问自己是否有办法在Java中拥有一个固定大小的优先级队列.我的行为应该是这样的:物品是否比已存储的物品更好?如果是,请将其插入相应的位置并抛出最小等级的元素.
有没有人有想法?再次感谢!
马尔科
我在为双端队列 (Deque) 的大小分配限制时遇到问题。似乎我的队列永远不会满,并且每当我为其添加或提供值时就会调整大小。我的简单代码只接受一个字符串值,用空格“”分割它,循环所有内容并将其添加到队列中。
evaluate("A B C D E F");
public static int evaluate(final String input){
final Deque<String> stack = new ArrayDeque<>(3);
final String[] tokens = input.split(" ");
for (String token:tokens){
System.out.println(stack.offer(token));
}
System.out.println(stack.size());
}
Run Code Online (Sandbox Code Playgroud)
返回:
true
true
true
true
true
true
6
Run Code Online (Sandbox Code Playgroud)
我预计队列将已满,因为我没有从中删除或读取任何值。我在这里缺少什么吗?或者我只是错误地使用了队列?谢谢!
Python中是否有这样一个队列的实现,它具有固定长度,当满时,弹出最左边的元素,同时在右边追加一个元素?
假设q = Queue([1,2,3,4,5])我的队列的最大长度为 5,我说q.append(6),那么预期输出print(q)应该是Queue([2,3,4,5,6])
这个问题也可以链接到:是否有一个固定大小的队列可以删除过多的元素?
我们刚刚在课堂上学习循环队列,我有几个问题.因为我们将尾部定义为最后一个值旁边的空白区域,如下所示:
|1| |3|4|5|6|
Run Code Online (Sandbox Code Playgroud)
头部将指向数字3,尾部将指向1到3之间的空白空间.我对如果该空间被填满会发生什么感到困惑,例如下面:
|1|2|3|4|5|6|
Run Code Online (Sandbox Code Playgroud)
然后头部仍然指向3,但是尾部需要指向前面空白框之后的下一个框,因此它将指向3或标题.我该怎么办?
我需要一个简单的缓存机制.
我想跟上最近添加的100个最新项目,但不超过这个限制.当我添加另一个项目时,我希望该集合自动删除第101个项目.想象一下,将LifeSaver糖果推入管中 - 当我在管的一端添加另一个糖果时,另一端糖果会掉出来.
写我自己很简单.在执行"添加"之前,我的"添加"方法将首先删除最旧的项目.我只是想知道是否已经写过这样的课程.
我查看了捆绑的Collection类,List,Queue等.我也看了一下谷歌番石榴.但似乎都没有这个简单的功能.
这对谷歌来说是个难题,因为我不知道这种行为的行话.