Напишите свой код так, чтобы он использовал только интерфейс, за исключением создания очереди.Тогда легко переключать реализации.
Выберите одну реализацию для начала.Я обычно использую варианты массивов (например, ArrayList), потому что они меньше и имеют тенденцию быть несколько быстрее на современных компьютерах, что, по-моему, связано с кэшированием (я только что провел небольшой тест, проталкивая 10000000 элементов через очередь 10000 элементов, ~8,3 с для ArrayBlockingQueue, 10-11 с для LinkedBlockingQueue).Если мне нужен индексированный доступ, я бы также использовал вариант массива.Только если в середине списка или очереди много вставок / удалений, я бы выбрал вариант связанного списка.
Если у вас есть проблемы с производительностью, а профилирование показывает, что очередь является узким местом (что являетсямаловероятно), сравните с обеими реализациями очереди и выберите ту, которая лучше.