2017-06-07 8 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インタフェースのサイズ変更可能な配列の実装を読んでいません。配列dequesには容量の制限はありません。彼らは使用法をサポートするために必要に応じて成長する。 – Eran

+0

私は、その種の特性を実装するキューのタイプがあれば、どんな提案もありますか? – Juni

答えて

0

私が意図した動作を使用して独自のクラスを実装することをアドバイスしてオブジェクトを提供する仕事を処理することができます。さもなければ余分な要素を取り除くクラスが既に存在します。この答えを参照してください https://stackoverflow.com/a/21699069/228358

+0

ok、ありがとう – Juni

+0

@Juni面白いと思ったら、私の答えを投票してください。 –

0

あなたは

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

3を行うドキュメントがhere

を説明しているようArrayDequeが同じくらいあなたが必要として成長することができ、そしてあなたとサイズを制限されていないサイズが、初期容量ではありませんそのコンストラクタのパラメータ。


あなたの周りの配列を暴露いけないが、代わりにあなたが/追加したい毎回チェック両端キュー

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

ああ、もしそうなら、あなたはArrayDequeのサイズを制限する方法を知っていますか? – Juni

関連する問題