2015-06-23 4 views
0

У меня возникли проблемы с пониманием того, как работает CircularFifoQueue Class. Поэтому для моих требований мне нужна очередь FIFO фиксированного размера (около 6000 элементов). В frist я использовал ArrayDequeue, но он выполнял довольно плохо. Затем я прочитал о CircularFifoQueue и попробовал. Я вижу повышение производительности, но все еще не быстро.Производительность Java CircularFifoQueue

Мой вопрос: что произойдет, если очередь заполнена и я добавлю элемент? Скопирован ли весь основной массив? Есть ли какое-то смещение, которое будет установлено, например.

head = (head + 1) % size; 

Если последнее имеет значение, то я предполагаю, что мой алгоритм работает плохо.

Спасибо!

+0

Вы пробовали и обманули его? Насколько я могу видеть из [источников] (https://commons.apache.org/proper/commons-collections/cobertura/org.apache.commons.collections4.queue.CircularFifoQueue.html): при добавлении нового элемента в полный список вызывается метод remove(), удаляя таким образом элемент. Это поведение также описано в javadocs для add(). – bratkartoffel

+0

@bratkartoffel Да, я сделал, самое время потрачено на выполнение метода offer() – hh32

ответ

2

docs говорит следующее о введении в CircularFifoQueue:

Если очередь заполнена, по меньшей мере недавно добавленный элемент отбрасывается так , что новый элемент может быть вставлен.

Когда речь идет о производительности, то следует отметить, что помимо методов add, remove, peek, poll и offer, выполняемых в постоянное время, все методы этой структуры данных выполняют в линейное время, или хуже ,

+0

, можете ли вы рекомендовать структуру данных, которая работает лучше, когда часто добавляются элементы в очередь fulll? – hh32

+0

У вас есть требования к безопасности потоков? –

+0

Нет, у меня нет – hh32

 Смежные вопросы

  • Нет связанных вопросов^_^