スタックはLIFO順序に従うデータ構造です。私の知る限り、スタックはトップ要素にのみアクセスできます。しかし、Javaでは、スタックを持つイテレータを使用することができます。これは、上の要素だけにアクセスできるという上記の考え方に何らかの形で矛盾しています。Javaのスタックでイテレータを使用することはどのように正当化されますか
サンプルコード今
Stack<Integer> s=new Stack<Integer>();
s.push(10);
s.push(20);
s.push(30);
------------------------------------------------------------------------
Iterator<Integer> itr=s.iterator();
while(itr.hasNext())
{
System.out.print(itr.next() + " "); // ouput:- 10 20 30
}
私は、FIFO順でスタックをトラバースすることができますし、私も
はそれは非常にですitr.removeを()を使用して、任意の要素を削除することができ、スタック上のイテレータを持っています混乱:)
...
PSを説明してください:場合、私は場所0で反復子を使用しますf iteratorの場合は、前者の方がより多くのメソッドを提供するため、さらに混乱します。
「トップ要素のみ」は間違っています。スタックは、通常、トップに関連する要素、トップ1、トップ2などにアクセスすることを可能にします。イテレータは、同じ方法ですべての要素を通過することができます。 – markspace
おそらく、非常にメソッドがスレッドセーフである場合は、スタックをベクタにして使用しないでください。 – SMA
これは '純粋な'理論的スタックと少し違っていて、ほとんどの場合、これを使わない(スタックの出力とデバッグを除いて)が便利です:) stackの定義はpush、ポップ、トップ ' – okaram