Документация ArrayDeque
говорит:ArrayDeque против ArrayList реализовать стек
Этот класс, вероятно, будет быстрее, чем стек при использовании в качестве стека, и быстрее, чем при использовании LinkedList как очереди.
Там нет упоминания о различии между использованием ArrayDeque
в качестве стека и используя ArrayList
. Вы можете использовать ArrayList
в виде стека следующим образом.
list.add(object); // push
object = list.remove(list.size() - 1); // pop
Я обнаружил, что, когда я использовал ArrayList
только таким образом, его производительность хуже, чем ArrayDeque
. Что объясняет это различие? Наверняка, это не просто вызовы size()
? Внутренне, как ArrayList
, так и ArrayDeque
реализованы с использованием Object[]
, который при необходимости заменяется большим массивом, так что, конечно же, производительность должна быть примерно одинаковой?
Хорошее объяснение здесь - HTTP : //stackoverflow.com/questions/6129805/what-is-the-fastest-java-collection-with-the-basic-functionality-of-a-queue –
Измерение такой предположительно крошечной разницы в производительности Java очень сложно делай правильно. И ArrayDeque - лучшая абстракция в любом случае, чем ArrayList, поскольку он напрямую предлагает методы push и pop. –
@ JBNizet Согласен. Я всегда буду использовать 'ArrayDeque'. Мне просто интересно понять, что такое 'ArrayDeque'. Как он может поддерживать быструю вставку и удаление с обоих концов и все же бить типы данных, которые не поддерживают это? –