Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java PriorityQueue: основы, операции и пользовательская сортировка

Java PriorityQueue

Изучите класс PriorityQueue в Java Collections Framework через чёткие примеры и лучшие практики.

Класс PriorityQueue реализует структуру данных кучу и удовлетворяет интерфейсу Queue, предлагая эффективное извлечение элементов на основе приоритета, а не порядка вставки.


Создание PriorityQueue

Начните с импорта java.util.PriorityQueue:

import java.util.PriorityQueue;
PriorityQueue<Integer> numbers = new PriorityQueue<>();

Эта конфигурация по умолчанию использует естественный порядок (по возрастанию). Порядок можно настроить, передав Comparator при создании очереди.


Ключевые методы PriorityQueue

Доступны все методы, определённые в интерфейсе Queue, плюс несколько специфичных для очереди операций.


Вставка элементов

Пример:

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        System.out.println("PriorityQueue: " + numbers);
        numbers.offer(1);
        System.out.println("Updated PriorityQueue: " + numbers);
    }
}

Вывод

PriorityQueue: [2, 4] Updated PriorityQueue: [1, 4, 2]

Хотя 4 был добавлен до 2, голова остаётся 2, так как это наименьший элемент. Добавление 1 переупорядочивает очередь, делая 1 головой.


Доступ к элементам

Используйте peek() для просмотра головы без удаления:

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.println("PriorityQueue: " + numbers);
        int number = numbers.peek();
        System.out.println("Accessed Element: " + number);
    }
}

Вывод

PriorityQueue: [1, 4, 2] Accessed Element: 1

Удаление элементов

Пример:

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.println("PriorityQueue: " + numbers);
        boolean result = numbers.remove(2);
        System.out.println("Is the element 2 removed? " + result);
        int number = numbers.poll();
        System.out.println("Removed Element Using poll(): " + number);
    }
}

Вывод

PriorityQueue: [1, 4, 2] Is the element 2 removed? true Removed Element Using poll(): 1

Итерация по PriorityQueue

Итерируйте с помощью iterator() (требует java.util.Iterator):

import java.util.PriorityQueue;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.print("PriorityQueue using iterator(): ");
        Iterator<Integer> iterate = numbers.iterator();
        while (iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Вывод

PriorityQueue using iterator(): 1, 4, 2,

Дополнительные методы

МетодОписание
contains(element)Возвращает true, если элемент существует в очереди.
size()Возвращает количество элементов в очереди.
toArray()Преобразует очередь в массив.

Пользовательская сортировка с Comparator

Для обратного естественного порядка или любой пользовательской логики приоритета передайте Comparator при создании очереди:

import java.util.PriorityQueue;
import java.util.Comparator;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numbers = new PriorityQueue<>(new CustomComparator());
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        numbers.add(3);
        System.out.print("PriorityQueue: " + numbers);
    }
}
class CustomComparator implements Comparator<Integer> {
    @Override
    public int compare(Integer a, Integer b) {
        return b.compareTo(a); // обратный порядок
    }
}

Вывод

PriorityQueue: [4, 3, 1, 2]

Пользовательский компаратор гарантирует, что голова — наибольший элемент. Для более глубокого понимания обратитесь к Java Comparator API.

java

  1. Освоение операторов Java: типы, синтаксис и практические примеры
  2. Комментарии в Java: типы, использование и лучшие практики
  3. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  4. Освоение строк в Java: создание, методы и лучшие практики
  5. Интерфейсы в Java: концепции, реализация и лучшие практики
  6. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  7. Try-with-resources в Java: автоматическое управление ресурсами
  8. Аннотации в Java: типы, размещение и практические примеры
  9. Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
  10. Понимание Java Vector: использование, особенности и сравнение с ArrayList