これは、スタックオーバーフローに関する適切な質問ではない可能性があります。しかし、これらの実装について何か言いたいことがあります。
-> まず、特定のインターフェースに対して異なる実装を提供する理由に答える必要があります。インターフェイス A があり、その 2 つの実装があるとします。たとえば、B と C とします。これらの実装は、実装を通じて同じ機能を提供するとします。しかし、B は C よりもパフォーマンスが優れています。次に、2 つの理由を除いて、実装を削除する必要があります。
1. Backward Compatibility - marking as deprecated.
2. There is a specific scenario where we cannot use B implementation.
例えば:
HashMap と LinkedHashMap -> 順序付けられたキーが必要な場合は、LinkedHashMap を使用します。それ以外の場合は、HashMap を使用します (パフォーマンスを少し向上させるため)。
ArrayBlockingQueue と LinkedBlockingQueue
境界キューが必要な場合は、ArrayBlockingQueue を使用します。それ以外の場合は、LinkedBlockingQueue を使用します。
今あなたの質問LinkedBlockingDeque が存在するのに ArrayBlockingDeque がないのはなぜですか。
まず ArrayDeque が存在する理由を見てみましょう。
ArrayDeque の Java ドキュメントから。
したがって、 ArrayBlockingDeque があった場合。
1. There would have been no Capacity Restriction, which we normally
get from ArrayBlockingQueue.
2. There would have guards to access to tail and head pointers
same as in LinkedBlockingDeque and therefore no significant performance
gain over LinkedBlockingDeque.
したがって、ArrayBlockingDeque の実装は存在しないと結論付けます。これは、この実装が LinkedBlockingDeque を介して提供できるものは何もないためです。何かがあることを証明できる場合は、はい、実装が必要です:)