Java初心者の競技プログラミング日記

Dvorak配列でjavaを書いてます

ArrayDequeとLinkedList

基本的にはArrayDequeとLinkedListのどちらも、キュー・スタックとして使えるようだ。

先頭に挿入:addFirst
末尾に挿入:addLast

先頭を取得:getFirst
末尾を取得:getLast

先頭を取得して削除:removeFirst
末尾を取得して削除:removeLast

ここまではArrayDequeとLinkedListで共通しているメソッド。

LinkedListには、これらのメソッドのほかにもindexOfとlastIndexOfがある。ArrayDequeにはない。

優先度つきのPriorityQueueというクラスもあるらしい(使ったことない)。



【補足】
・挿入、削除、取得を両端でしか行わない場合、ArrayDequeのほうが高速に動作するらしい。
・配列の中間にアクセスする場合(containsやindexOfなど)は、LinkedListのほうが速いらしい。
・先頭から2つの要素を順に取得したいというような場合、

 int a = deque.getFirst();
 deque.removeFirst();
 int b = deque.getFirst();
 deque.removeFirst();

 とするのではなく、removeFirstを上手く使って、

 int a = deque.removeFirst();
 int b = deque.removeFirst();

 とすることで短く簡潔に書ける。