English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Управление потоком Java

Java Массив

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Список (List)

Java Queue (очередь)

Множество Java Map

Множество Java Set

Ввод/вывод (I/O) Java

Java Reader/Writer

Другие темы Java

Реализация структуры данных очередь (Queue) в программе Java

    Java полный список примеров

В этом примере мы будем изучать реализацию структуры данных очередь на Java.

Чтобы понять этот пример, убедитесь, что вы сначала ознакомились с следующими учебниками:

Пример 1: Программа Java для реализации стека

public class Queue {
  int SIZE = 5;
  int items[] = new int[SIZE];
  int front, rear;
  Queue() {
    front = -1;
    rear = -1;
  }
  // 检查队列是否已满
  boolean isFull() {
    if (front == 0 && rear == SIZE - 1) {
      return true;
    }
    return false;
  }
  // 检查队列是否为空
  boolean isEmpty() {
    if (front == -1)
      return true;
    else
      return false;
  }
  // 将元素插入队列
  void enQueue(int element) {
    // 如果队列已满
    if (isFull()) {
      System.out.println("Queue is full");
    }
    else {
      if (front == -1) {
        // 标记 front 表示队列的第一个元素
        front = 0;
      }
      rear++;
      // 在后面插入元素
      items[rear] = element;
      System.out.println("Insert " + element);
    }
  }
  // 从队列中删除元素
  int deQueue() {
    int element;
    // 如果队列为空
    if (isEmpty()) {
      System.out.println("Queue is empty");
      return (-1);
    }
    else {
      //Удаление элемента с передней стороны очереди
      element = items[front];
      // 如果队列中只有一个元素
      if (front >= rear) {
        front = -1;
        rear = -1;
      }
      else {
        // 将下一个元素标记为 front
        front++;
      }
      System.out.println(element + " Deleted");
      return (element);
    }
  }
  // 显示队列元素
  void display() {
    int i;
    if (isEmpty()) {
      System.out.println("Empty Queue");
    }
    else {
      // 显示队列的front
      System.out.println("\nFront index-> " + front);
      // 显示队列的元素
      System.out.println("Items -> ");
      for (i = front; i <= rear; i++)
        System.out.print(items[i] + " ");
      // Показать заднюю часть очереди
      System.out.println("\nЗадний индекс-> " + rear);
    }
  }
  public static void main(String[] args) {
    // Создание объекта класса Queue
    Queue q = new Queue();
    // Попытка удалить элемент из очереди
    // Текущая очередь пуста
    // Поэтому их нельзя удалить
    q.deQueue();
    // Добавление элементов в очередь
    for(int i = 1; i < 6; i++) {
      q.enQueue(i);
    }
    // Не возможно добавить 6-й элемент в очередь, так как очередь полна
    q.enQueue(6);
    q.display();
    // deQueue удаляет первый добавленный элемент, например: 1
    q.deQueue();
    //Теперь у нас только 4 элемента
    q.display();
  }
}

Результат вывода

Очередь пуста
Вставить 1
Вставить 2
Вставить 3
Вставить 4
Вставить 5
Очередь полна
Передний индекс-> 0
Элементы->
1    2    3    4    5  
Задний индекс-> 4
1 Удален
Передний индекс-> 1
Элементы->
2    3    4    5
Задний индекс-> 4

В предыдущем примере мы реализовали структуру данных очередь на Java.

Пример 2: Использование интерфейса Queue для реализации стека

Java предоставляет встроенный интерфейс Queue, который можно использовать для реализации очереди.

import java.util.Queue;
import java.util.LinkedList;
class Main {
  public static void main(String[] args) {
    //Использование класса LinkedList для создания очереди
    Queue<Integer> numbers = new LinkedList<>();
    // enqueue
    //Вставка элемента в конец очереди
    numbers.offer(1);
    numbers.offer(2);
    numbers.offer(3);
    System.out.println("Очередь: " + numbers);
    // dequeue
    //Удаление элемента с передней стороны очереди
    int removedNumber = numbers.poll();
    System.out.println("Удаленный элемент: " + removedNumber);
    System.out.println("В后排 после удаления: " + numbers);
    }
}

Результат вывода

Очередь: [1, 2, 3]
Удаленный элемент: 1
В后排 после удаления: [2, 3]

В примере выше мы использовали интерфейс Java Queue для реализации очереди. Здесь мы используем класс LinkedList для реализации интерфейса Queue.

  • Numbers.offer() - Вставить элемент в конец очереди

  • Numbers.poll() - Удалить элемент с начала очереди

Обратите внимание, что при создании очереди мы используем угловые скобки <Integer>. Это означает, что очередь является генерическим типом. Для получения更多信息 о генериках посетитеJava генерик.

Мы также можем использовать другие интерфейсы и классы для замены Queue и LinkedList. Например:

Java полный список примеров