Какова самая быстрая коллекция Java с базовыми функциями очереди?

Какова самая быстрая коллекция на Java?

Мне нужны только операции для добавления и удаления, порядок не важен, равные элементы не являются проблемой, не более чем добавление и удаление.

Без ограничения размера тоже важно.

В этой коллекции будут объекты внутри него.

В настоящее время я использую ArrayDeque, потому что я вижу, что это более быстрая реализация Queue.

Ответ 1

ArrayDeque лучше. См. этот тест, который исходит от этого сообщения в блоге о результаты бенчмаркинга. ArrayDeque не имеет накладных расходов node распределений, которые LinkedList делает, и накладные расходы на перенос содержимого массива, оставшегося на удаление, которое имеет ArrayList. В тесте он выполняет 3x, а также LinkedList для больших очередей и даже немного лучше, чем ArrayList для пустых очередей. Для лучшей производительности вы, вероятно, захотите дать ему начальную емкость, достаточно большую, чтобы удерживать количество элементов, которые она может удерживать за раз, чтобы избежать многих изменений.

Между ArrayList и LinkedList, кажется, что это зависит от среднего числа общих элементов, которые будут содержать очередь в любой момент времени, и что LinkedList бьет ArrayList, начиная с примерно 10 элементов.

Ответ 2

Вы можете использовать java.util.LinkedList - он двусвязный и cicrular, поэтому добавление в один конец и взятие из другого - O (1)

Какую бы реализацию вы ни выбрали, обратитесь к ней с помощью интерфейса Queue, чтобы вы могли легко изменить ее, если она не подходит для вашего случая (если, конечно, очередь - это то, что вам нужно в первую очередь )

Обновление: ответ Colin показывает тест, который заключает, что ArrayDeque лучше. Оба имеют операции O (1), но LinkedList создает новые объекты (узлы), которые имеют небольшую производительность. Поскольку оба имеют O (1), я не думаю, что было бы слишком неправильно выбирать LinkedList, хотя.