在 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。看到这个答案
我在为双端队列 (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。看到这个答案