Если несколько потоков будут обращаться к очереди, рассмотрите возможность использования ArrayBlockingQueue
. В противном случае взгляните на ArrayDeque
. Из ArrayDeque
API:
Этот класс, вероятно, будет быстрее, чем
Стек при использовании в качестве стека и быстрее
чем LinkedList при использовании в качестве очереди.
В частности, реализация очереди на основе массива уменьшает необходимость изменения размера нижележащего массива, если существующий массив имеет достаточную емкость, что делает добавления в очередь, как правило, быстрее, чем LinkedList
. Имейте в виду, что ArrayBlockingQueue
является ограниченной реализацией, тогда как ArrayDeque
будет изменять размер по мере необходимости.
Обратная сторона в том, что LinkedList
обычно обеспечивает гораздо более компактное представление, особенно в тех случаях, когда ваша очередь увеличивается или уменьшается в размерах. Например, если вы добавили 10 000 000 элементов к ArrayDeque
, а затем удалили 9 999 999 элементов, базовый массив все равно будет иметь длину 10 000 000, тогда как LinkedList
не будет страдать от этой проблемы.
В действительности, для однопоточного доступа к неблокирующей очереди я предпочитаю LinkedList
. Я думаю, что различия в производительности настолько незначительны, что вы все равно не заметите разницу.