Когда использовать Queue over ArrayList в Java?
Опубликовано: 6 Января, 2023
Список массивов:
- ArrayList является частью Collection Framework и реализует интерфейс списка Java. Этот класс предоставляет методы для изменения размера списка в зависимости от потребностей.
- Это позволяет иметь нулевые и повторяющиеся значения.
- Список массивов похож на вектор в Java, за исключением того, что он не синхронизирован. Это не потокобезопасно, но быстрее, чем векторы.
- Это упорядоченная коллекция , которая может вставлять элементы с помощью индексов.
- ArrayList может содержать только объекты, но не может обрабатывать примитивные типы .
Операции, выполняемые в ArrayList:
- add() — вставить элемент в ArrayList
- clear() — удалить все элементы из списка.
- contains() — проверяет, присутствует ли элемент в списке.
- get() — возвращает индекс элемента.
- size() — возвращает размер списка.
Ниже приведен код, демонстрирующий реализацию ArrayList:
Преимущества ArrayList:
- Это очень быстро из-за его асинхронного поведения.
- Он поддерживает порядок, что означает, что новый элемент добавляется непосредственно в конец списка.
- При превышении ArrayList размер увеличивается только на 50%.
- Он динамичен по размеру
Недостатки ArrayList:
- ArrayList содержит только объекты, но не примитивные типы.
- Если элемент удаляется из массива, весь массив сдвигается для обновления списка, что приводит к потере памяти.
- Данные расположены последовательно, для больших списков требуется больший непрерывный блок памяти.
Очередь:
- Очередь — это абстрактный линейный тип данных, который следует принципу FIFO (первым поступил — первым обслужен).
- Очередь может ставить элементы в очередь на заднем конце и удалять элементы из очереди на переднем конце.
- Java имеет интерфейс очереди, который является частью структуры коллекции.
Операции, выполняемые в очереди:
- enqueue(): добавляет элемент или данные в очередь.
- dequeue(): Dequeue удаляет элемент из очереди.
- peek(): эта функция получает элемент впереди, не удаляя его.
- isfull(): проверяет, заполнена ли очередь.
- isempty(): эта функция проверяет, пуста ли очередь.
Ниже представлена реализация Queue в Java:
Преимущества очереди:
- Очередь имеет два конца, один для вставки, другой для удаления.
- Постановка в очередь и удаление из очереди занимают всего O(1) раз.
- Очереди гибкие
- Это полезно для управления многочисленными потребностями пользователей.
Недостатки очереди:
- Вставка и удаление элементов из середины сложны.
- Размер ограничен и определен заранее.
- Новый элемент не может быть вставлен, когда очередь заполнена, старый элемент необходимо удалить, чтобы вставить новый.
- Память используется неэффективно, так как когда мы удаляем элемент, память которого снова не используется в линейной очереди, это можно преодолеть с помощью циклической очереди.
Когда использовать очереди над ArrayList?
- Очереди эффективно используются , когда их размер заранее определен , так как невозможно увеличить размер очереди динамически.
- Когда операции удаления и вставки элементов в середине списка нет , ее легко реализовать с помощью очередей, так как она может вставлять и удалять элементы в конце со сложностью O(1).
- Например, в кассе торгового центра неудобно работать с ArrayList, когда клиенты из середины приходят для выставления счетов. Вместо этого использование структуры данных очереди является понятным и удобным для выставления счетов. Как мы знаем, используя очередь, мы должны следовать FIFO, чтобы первый клиент получил счет первым без каких-либо осложнений. При использовании ArrayList есть вероятность, что он может добавлять или удалять элементы из середины списка. Использование очередей для таких сценариев может помочь в лучшей оптимизации и параллелизме.
- Из приведенного выше примера мы можем сделать вывод, что мы должны использовать очередь, когда мы хотим, чтобы элементы работали по порядку, в то время как мы должны использовать ArrayList, когда нам нужны данные из середины списка, а размер не задан заранее.
- Стеки и очереди реализованы с использованием списков, но вставка и удаление элементов ограничены только концами.
- Очереди используются, когда несколько объектов хотят использовать «ресурс», но только один объект может использовать ресурс одновременно .