Stack
ユースケースのデータ構造が必要です。アイテムをデータ構造にプッシュでき、スタックから最後のアイテムのみを取得したいのですが。StackのJavaDocはこう言っています:
Dequeインターフェースとその実装によって、より完全で一貫性のあるLIFOスタック操作のセットが提供されます。これは、このクラスよりも優先して使用する必要があります。例えば:
Deque<Integer> stack = new ArrayDeque<>();
このデータ構造をメソッドにローカルで使用するため、ここでは同期動作は絶対に必要ありません。これとは別に、なぜ私Deque
はStack
ここより好むのですか?
PS:Dequeのjavadocによると:
両端キューは、LIFO(後入れ先出し)スタックとしても使用できます。このインターフェイスは、従来のStackクラスよりも優先して使用する必要があります。
1つには、継承の点でより賢明です。私の考えでは、Stack
拡張するという事実Vector
は非常に奇妙です。Javaの初期の段階では、継承はIMOの使いすぎでした- Properties
別の例です。
私にとって、あなたが引用したドキュメントの重要な言葉は一貫しています。Deque
コレクションの最初または最後からアイテムをフェッチ/追加/削除したり、繰り返し処理したりできるすべての操作のセットを公開します-それだけです。位置によって要素に意図的にアクセスする方法はありません。これStack
は、のサブクラスであるため公開されVector
ます。
ああ、それにStack
インターフェースもないので、Stack
操作が必要だとわかっていると、特定の具象クラスにコミットすることになりますが、これは通常は良い考えではありません。
また、などのコメントで指摘、Stack
及びDeque
逆反復の注文を持っています:
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(new ArrayList<>(stack)); // prints 1, 2, 3
Deque<Integer> deque = new ArrayDeque<>();
deque.push(1);
deque.push(2);
deque.push(3);
System.out.println(new ArrayList<>(deque)); // prints 3, 2, 1
これは、JavaDocs for Deque.iterator()でも説明されています。
この両端キュー内の要素を適切な順序で繰り返し処理する反復子を返します。要素は最初(先頭)から最後(末尾)の順に返されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加