Javaの最速のコレクションは何ですか?
追加と削除の操作が必要なだけです。順序は重要ではありません。等しい要素は問題ではありません。追加と削除以外は重要ではありません。
制限なしのサイズも重要です。
これらのコレクションには、彼の中にオブジェクトがあります。
現在、ArrayDequeを使用しています。これは、これがより高速なQueue実装であるためです。
ArrayDeque
が最適です。これをベンチマークした結果については、 this blog post に由来する このベンチマーク を参照してください。 ArrayDeque
には、LinkedList
にあるノード割り当てのオーバーヘッドも、ArrayList
にある削除時に残っている配列の内容をシフトするオーバーヘッドもありません。ベンチマークでは、約3xだけでなく、大きなキューの場合はLinkedList
、空のキューの場合はArrayList
よりもわずかに優れています。最高のパフォーマンスを得るには、多くのサイズ変更を回避するために、一度に保持する可能性のある要素の数を保持するのに十分な初期容量を与えるとよいでしょう。
ArrayList
とLinkedList
の間では、キューに常に含まれる合計要素の平均数に依存し、LinkedList
は約10からArrayList
に勝ちます要素。
Java.util.LinkedList
を使用できます。二重にリンクされており、暗号化されているため、一方の端に追加してもう一方の端から取得することはO(1)です。
どの実装を選択する場合でも、Queue
インターフェースで参照し、ケースに合わない場合は簡単に変更できるようにします(もちろん、キューが必要な場合は)
更新:Colinの答えは、ArrayDeque
が優れていると結論付けるベンチマークを示しています。両方ともO(1)操作がありますが、LinkedList
は新しいオブジェクト(ノード)を作成しますが、これはわずかにパフォーマンスが向上します。両方ともO(1) = LinkedList
を選択するのは間違っているとは思わない。