Spec-Zone .ru
спецификации, руководства, описания, API
След: Наборы
Урок: Интерфейсы
Интерфейс Очереди
Домашняя страница > Наборы > Интерфейсы

Интерфейс Очереди

A Queue набор для содержания элементов до обработки. Помимо основного Collection операции, очереди обеспечивают дополнительную вставку, удаление, и инспекционные операции. Queue интерфейс следует.

public interface Queue<E> extends Collection<E> {
    E element();
    boolean offer(E e);
    E peek();
    E poll();
    E remove();
}

Каждый Queue метод существует в двух формах: (1) каждый выдает исключение, если работа перестала работать, и (2) другие возвраты специальное значение, если работа перестала работать (также null или false, В зависимости от работы). Регулярная структура интерфейса иллюстрируется в следующей таблице.

Структура Интерфейса очереди
Тип Работы Выдает исключение Возвраты специальное значение
Вставить add(e) offer(e)
Удалить remove() poll()
Исследовать element() peek()

Очереди обычно, но не обязательно, упорядочивают элементы в FIFO (первым прибыл - первым убыл) способ. Среди исключений приоритетные очереди, которые упорядочивают элементы согласно их значениям — см. Объект Упорядочить раздел для деталей). Независимо от того, что упорядочивание используется, глава очереди является элементом, который был бы удален звонком remove или poll. В очереди FIFO все новые элементы вставляются в хвосте очереди. Другие виды очередей могут использовать различные правила размещения. Каждый Queue реализация должна определить свои свойства упорядочивания.

Это возможно для a Queue реализация, чтобы ограничить число элементов, которое это содержит; такие очереди известны как ограничено. Некоторые Queue реализации в java.util.concurrent ограничиваются, но реализации в java.util не.

add метод, который Queue наследовался от Collection, вставляет элемент, если он не нарушил бы ограничения емкости очереди, когда он бросает IllegalStateException. offer метод, который предназначается исключительно для использования на ограниченных очередях, отличается от add только в этом это указывает на отказ вставить элемент, возвращаясь false.

remove и poll методы и удаляют и возвращают главу очереди. Точно то, какой элемент удаляется, является функцией политики упорядочивания очереди. remove и poll методы отличаются по своему поведению только, когда очередь пуста. При этих обстоятельствах, remove броски NoSuchElementException, в то время как poll возвраты null.

element и peek возврат методов, но не удаляют, глава очереди. Они отличаются от друг друга по точно тому же самому виду как remove и poll: Если очередь пуста, element броски NoSuchElementException, в то время как peek возвраты null.

Queue реализации обычно не позволяют вставку null элементы. LinkedList реализация, которая была retrofitted, чтобы реализовать Queue, исключение. По историческим причинам это разрешает null элементы, но следует воздержаться от использования в своих интересах этого, потому что null используется в качестве специального возвращаемого значения poll и peek методы.

Реализации очереди обычно не определяют основанные на элементе версии equals и hashCode методы, но вместо этого наследовали основанные на идентификационных данных версии от Object.

Queue интерфейс не определяет методы очереди блокирования, которые распространены в параллельном программировании. Эти методы, которые ожидают элементов, чтобы появиться или пространства, чтобы стать доступными, определяются в интерфейсе java.util.concurrent.BlockingQueue, который расширяется Queue.

В следующем примере программы очередь используется, чтобы реализовать таймер обратного отсчета. Очередь предварительно загружается со всеми целочисленными значениями от числа, определенного на командной строке, чтобы обнулить в порядке убывания. Затем, значения удаляются из очереди и печатаются в односекундных интервалах. Программа искусственна в этом, было бы более естественно сделать ту же самую вещь, не используя очередь, но это иллюстрирует использование очереди, чтобы сохранить элементы до последующей обработки.

import java.util.*;

public class Countdown {
    public static void main(String[] args) throws InterruptedException {
        int time = Integer.parseInt(args[0]);
        Queue<Integer> queue = new LinkedList<Integer>();

        for (int i = time; i >= 0; i--)
            queue.add(i);

        while (!queue.isEmpty()) {
            System.out.println(queue.remove());
            Thread.sleep(1000);
        }
    }
}

В следующем примере приоритетная очередь используется, чтобы сортировать набор элементов. Снова эта программа искусственна в этом нет никакой причины использовать ее в пользу sort метод, обеспеченный в Collections, но это иллюстрирует поведение приоритетных очередей.

static <E> List<E> heapSort(Collection<E> c) {
    Queue<E> queue = new PriorityQueue<E>(c);
    List<E> result = new ArrayList<E>();

    while (!queue.isEmpty())
        result.add(queue.remove());

    return result;
}

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Интерфейс Списка
Следующая страница: Интерфейс Карты