-2

Stack追加のメモリを使用せずに、上から下への要素をどのように反復処理できるか疑問に思っていました。デフォルトiterator()は下から上に行くと思います。があることにも気づきDequeましたdescendingIterator。スタックについてこれに似たものを見つけることができませんでした。私はそれが可能かどうか疑問に思っていました。特に何もありません。これが不可能な場合、Stack逆方向に反復する機能を備えた a の機能を提供する他の Java データ構造 ( Dequeofc を除く) はどれですか?

4

2 に答える 2

1

追加のメモリを使用せずに、スタックの要素を上から下にどのように反復処理できるか疑問に思っていました。

概念上、スタック は、少なくともそのすべての要素をポップすることはできません。限目。

ここでの主な問題は、このスタック データ構造を Javaと混同していることです。 Java は、そのスーパー クラスからStackを提供しており、おそらく混乱を招きます。実際、これは Java 1 に由来する設計上の問題です。クラスの使用は推奨されません。であり、 から拡張されているため、その使用もお勧めできません。また、クラスの JavaDoc で、作成者は次の情報を追加します (私のものを強調します)。iteratorVectorVectorStackvectorStack

Dequeインターフェースとその実装によって、より完全で一貫した LIFO スタック操作のセットが提供されます。これは、このクラスよりも優先して使用する必要があります


があることにも気づきDequeましたdescendingIterator...

コメントで述べたように、テクノロジ (この場合は Java) がデータ構造の反復処理に役立つという事実は、良いことです (または、見方や使い方によっては悪いことです)。

Dequeは両端キューであり、使用方法に応じて、スタックとキューの両方として機能することに注意してください。

からDeque拡張されIterableているため、要素のシーケンスなどの特定の動作を使用してその要素にアクセスできるようにするために を提供する必要がIteratorあります。このイテレータは、キューをナビゲートするように、最初から最後まで要素にアクセスします。descendingIteratorスタックをナビゲートするように、最後の要素から最初の要素へとアクセスするイテレータを返します。ただし、これはテクノロジの利点であることを考慮してください。

これが不可能な場合、逆方向に反復する機能を備えたスタックの機能を提供する他の Java データ構造 ( Dequeofc を除く) はどれですか?

並行する子である を除けばBlockingDeque、共通の Java インターフェイスにはないように見えます。これは、この設計によって推進されています。「インターフェイスにプログラムする」とはどういう意味ですか? . または別の構造を使用して最初からスタックを作成したり、スタックArrayListのように動作させたりすることができますが、それでもあなた次第であることに注意してください。

于 2013-11-14T16:35:48.883 に答える