StackでDequeを使用する必要があるのはなぜですか?

オタク:

Stackユースケースのデータ構造が必要です。アイテムをデータ構造にプッシュでき、スタックから最後のアイテムのみを取得したいのですが。StackJavaDocはこう言っています:

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

Deque<Integer> stack = new ArrayDeque<>();

このデータ構造をメソッドにローカルで使用するため、ここでは同期動作は絶対に必要ありません。これとは別に、なぜ私DequeStackここより好むのですか?

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]

編集
0

コメントを追加

0

関連記事

分類Dev

SerializeFieldを使用する必要があるのはなぜですか?

分類Dev

SerializeFieldを使用する必要があるのはなぜですか?

分類Dev

chrootを使用する必要があるのはなぜですか

分類Dev

Fortranで「使用のみ」を使用する必要があるのはなぜですか

分類Dev

なぜshutdownNow()ではなくawaitTerminationを使用する必要があるのですか?

分類Dev

AndroidでRequestQueueを使用する必要があるのはなぜですか?

分類Dev

$ resourceで$ promiseを使用する必要があるのはなぜですか?

分類Dev

Flutterでカードを使用する必要があるのはなぜですか?

分類Dev

Angular UnitTestingでJasmineSpy Objectを使用する必要があるのはなぜですか?

分類Dev

mongoDBクエリで+を使用する必要があるのはなぜですか

分類Dev

ReactJsでweb-packを使用する必要があるのはなぜですか?

分類Dev

'react'からimportReactを使用する必要があるのはなぜですか

分類Dev

なぜflatMapを使用する必要があるのですか?

分類Dev

なぜ基数を使用する必要があるのですか?

分類Dev

なぜEMFを使用する必要があるのですか?

分類Dev

なぜIDEを使用する必要があるのですか?

分類Dev

なぜJPanelを使用する必要があるのですか?

分類Dev

なぜstd :: forwardを使用する必要があるのですか?

分類Dev

Rails。なぜActiveRecordを使用する必要があるのですか?

分類Dev

なぜDjangoREST APIを使用する必要があるのですか?

分類Dev

なぜstrdup()を使用する必要があるのですか?

分類Dev

なぜgruntを使用する必要があるのですか-useminPrepare

分類Dev

なぜ@ngrx / storeを使用する必要があるのですか?

分類Dev

なぜreduxreact Nativeを使用する必要があるのですか?

分類Dev

jQueryにGoogleのCDNを使用する必要があるのはなぜですか?

分類Dev

Validators.compose()を使用する必要があるのはなぜですか?

分類Dev

<label>タグと 'for'属性を使用する必要があるのはなぜですか?

分類Dev

React with Meteorを使用する必要があるのはなぜですか?

分類Dev

minitest / autorunを使用する必要があるのはなぜですか?

Related 関連記事

  1. 1

    SerializeFieldを使用する必要があるのはなぜですか?

  2. 2

    SerializeFieldを使用する必要があるのはなぜですか?

  3. 3

    chrootを使用する必要があるのはなぜですか

  4. 4

    Fortranで「使用のみ」を使用する必要があるのはなぜですか

  5. 5

    なぜshutdownNow()ではなくawaitTerminationを使用する必要があるのですか?

  6. 6

    AndroidでRequestQueueを使用する必要があるのはなぜですか?

  7. 7

    $ resourceで$ promiseを使用する必要があるのはなぜですか?

  8. 8

    Flutterでカードを使用する必要があるのはなぜですか?

  9. 9

    Angular UnitTestingでJasmineSpy Objectを使用する必要があるのはなぜですか?

  10. 10

    mongoDBクエリで+を使用する必要があるのはなぜですか

  11. 11

    ReactJsでweb-packを使用する必要があるのはなぜですか?

  12. 12

    'react'からimportReactを使用する必要があるのはなぜですか

  13. 13

    なぜflatMapを使用する必要があるのですか?

  14. 14

    なぜ基数を使用する必要があるのですか?

  15. 15

    なぜEMFを使用する必要があるのですか?

  16. 16

    なぜIDEを使用する必要があるのですか?

  17. 17

    なぜJPanelを使用する必要があるのですか?

  18. 18

    なぜstd :: forwardを使用する必要があるのですか?

  19. 19

    Rails。なぜActiveRecordを使用する必要があるのですか?

  20. 20

    なぜDjangoREST APIを使用する必要があるのですか?

  21. 21

    なぜstrdup()を使用する必要があるのですか?

  22. 22

    なぜgruntを使用する必要があるのですか-useminPrepare

  23. 23

    なぜ@ngrx / storeを使用する必要があるのですか?

  24. 24

    なぜreduxreact Nativeを使用する必要があるのですか?

  25. 25

    jQueryにGoogleのCDNを使用する必要があるのはなぜですか?

  26. 26

    Validators.compose()を使用する必要があるのはなぜですか?

  27. 27

    <label>タグと 'for'属性を使用する必要があるのはなぜですか?

  28. 28

    React with Meteorを使用する必要があるのはなぜですか?

  29. 29

    minitest / autorunを使用する必要があるのはなぜですか?

ホットタグ

アーカイブ