在 Java 中为双端队列分配大小

Assigning a size to a Deque in Java

我在为双端队列 (Deque) 分配大小限制时遇到问题。似乎我的队列永远不会变满,只要我向它添加或提供一个值,它就会调整大小。我的简单代码只接受一个字符串值,将其拆分为 space " ",循环所有内容并将其添加到队列中。

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());
 }

returns:

 true
 true
 true
 true
 true
 true
 6

我原以为队列会满,因为我没有从队列中删除或读取任何值。我在这里缺少什么吗?还是我只是错误地使用了队列?谢谢!

当你这样做时

Deque<String> stack = new ArrayDeque<>(3);

3 不是大小,而是文档解释的初始容量 here

ArrayDeque 可以根据需要增长,并且您没有在构造函数中使用该参数限制大小。


你可以解决不暴露数组的问题,而是每次你想add/offer双端队列中的对象时检查

if (stack.size()<3) {
    stack.offer(token);
}

我建议您实现自己的 class 并实现所需的行为。否则已经存在删除过多元素的 classes。看到这个答案