2017-06-07 37 views
1

我无法为双端队列(Deque)的大小分配限制。看起来,我的队列永远不会变满,只要我添加或提供一个值就可以调整。我的简单代码只是接受一个字符串值,将它拆分为空格“”,循环所有内容并将其添加到队列中。为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()); 
} 

回报:

true 
true 
true 
true 
true 
true 
6 

我期待队列将满,因为我没有删除或从中读取的任何值。有什么我在这里失踪?或者我只是使用队列错误?谢谢!

+0

您正在阅读Javadoc --Deque接口的Resizable-array实现。 Array deques没有容量限制;它们根据需要增长以支持使用情况。 – Eran

+0

我看到,有任何建议,如果有任何类型的队列,实现这种特点? – Juni

回答

0

我劝你实现自己与期望的行为类提供了一个对象。否则已经存在删除过多元素的类。看到这个答案 https://stackoverflow.com/a/21699069/228358

+0

好吧,感谢 – Juni

+0

@Juni如果你觉得有趣,请回答我的答案。 –

0

当你

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

3体积不大,但初始容量为DOC解释here

的ArrayDeque可以成长,因为你需要尽可能多的,你不限制大小与该构造函数中的参数。


你可以处理一个变通不要露出阵列,而是检查要添加/每次在双端队列

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

哦,我看到了,如果是这样的话,你知道有什么方法来限制ArrayDeque的大小吗? – Juni