[解決済み】なぜスタックよりDequeを使うべきなのか?
質問
を必要としています。
Stack
データ構造を使用します。私はデータ構造にアイテムをプッシュすることができ、スタックから最後のアイテムだけを取り出したいと思っています。そのためには
スタックに関するJavaDoc
にはこうあります。
より完全で一貫したLIFOスタック操作のセットがあります。 は、Deque インターフェースとその実装によって提供されるため、そちらを使用する必要があります。 このクラスよりも優先的に使用されます。例えば
Deque<Integer> stack = new ArrayDeque<>();
私はこのデータ構造をメソッドにローカルに使用する予定なので、ここで同期化された動作は絶対に必要ではありません。これとは別に、なぜ
Deque
よりも
Stack
ここで?
追伸:Dequeのjavadocによると、.
<ブロッククオートDeques は LIFO (Last-In-First-Out) スタックとして使用することもできます。この インタフェースは、従来の Stack クラスよりも優先して使用されるべきです。
解決方法は?
ひとつには、継承の面でより理にかなっているということです。というのは
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でも説明されています。 Deque.iterator() :
この deque の要素に対するイテレータを、適切な順番で返します。要素は、最初 (head) から最後 (tail) までの順に返されます。
関連
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] C#でHashtableよりDictionaryが好まれる理由とは?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] tempとは何ですか、またjavaにおけるtempの用途は何ですか?
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] なぜJPAには@Transientアノテーションがあるのですか?
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] Androidのコールバックとは何ですか?重複
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] java.io.IOException。DER長の短い読み取り