2017-11-06 17 views
2

私は入門的なCS(Java)クラスにあり、先生は私たちのキューまたはスタックで.peek()を使用することを許可していません。キュー内のスタックで.peek()を使用しないことを推奨する理由はありますか?

明らかに、私たちが望むだけの数の一時的なintを持つ可能性があるので、これはかなり簡単な回避策です。値を変数にポップして戻すことができます。これはおそらく舞台裏で実装されている方法です。

キューでは、これはもう少し複雑になりますが、それでもやり遂げることができます。しかし、私はjavaがqueue.peekをどのように実装しているのかよくわからないので、ここでは字句置換を話すことはできません。

最終的に私は疑問に思います。なぜ覗き見をスタックやキューに入れるのをやめるのが良い習慣ですか?

+2

彼はあなたを良い練習に使うのではなく、特定の問題の解決策を見つけるために使用しないように指示しましたか?また先生に尋ねましたか? (答えを得るための簡単な方法と思われます) – AxelH

+0

@AxelHコース中いつでも使用することはできません。 –

+0

いくつかの標準的なキューインプリメンテーションのクイックチェックでは、大幅なコストはかかりません。これは、 'JMS'のようにもっと一般的な待ち行列について話しているならば、違うかもしれません。これのための最初の港はあなたの先生かもしれません、それは私が以前聞いた "規則"ではありません。 – ptomli

答えて

5

なぜスタックとキューに覗き見をするのが良いのですか?

ため:

  1. チラッと覗くことが多いポーリングに関連付けられている、とポーリングは無駄です。
  2. マルチスレッドアプリケーションでpeek()と、次にpop()またはremove()を呼び出す場合、毎回同じ要素を取得する保証はありません。

ここで明らかに、peek()のすべての用途が悪いとは限りません。しかし、これらが悪いことがある理由です。

しかし、私はあなたが先生に尋ねるように提案した人々にも同意します!


1 - ... 繰り返しの意味でのポーリングそれが空/空である場合は、キューの先頭、またはテストにあるものを見ています。