java queue queue methods
У цьому посібнику ми обговоримо, що таке черга в Java, як її використовувати, приклад черги Java, методи чергування Java та реалізація інтерфейсу черги:
Черга - це лінійна структура даних або колекція на Java, яка зберігає елементи в порядку FIFO (First In, First Out).
Колекція черги має два кінці, тобто спереду та ззаду. Елементи додані ззаду і видалені спереду.
=> Завітайте сюди, щоб побачити навчальну серію Java для всіх.
Що ви дізнаєтесь:
Що таке черга Java?
Структура даних черги представлена, як показано нижче:
Як показано на наведеній вище схемі, черга - це структура, що має дві точки, тобто початок (спереду) і кінець (ззаду). Елементи вставляються в чергу на задньому кінці і вилучаються з черги спереду.
У Java Queue - це інтерфейс, який є частиною пакету java.util. Інтерфейс черги розширює інтерфейс Java Collection.
Загальне визначення інтерфейсу черги:
public interface Queue extends Collection
Оскільки Черга є інтерфейсом, її неможливо створити. Нам потрібні деякі конкретні класи для реалізації функціональності інтерфейсу Черги. Два класи реалізують інтерфейс черги, тобто LinkedList та PriorityQueue.
Нижче наведено деякі основні характеристики структури даних Черги:
- Черга дотримується порядку FIFO (First In, First Out). Це означає, що елемент вставляється в чергу в кінці і вилучається з черги на початку.
- Інтерфейс черги Java забезпечує всі методи інтерфейсу колекції, такі як вставка, видалення тощо.
- LinkedList та PriorityQueue - це класи, що реалізують інтерфейс Queue. ArrayBlockingQueue - це ще один клас, який реалізує інтерфейс Queue.
- Черги, які є частиною пакету java.util, можуть бути класифіковані як необмежені черги, тоді як ті, що присутні в java.util.сучасний пакет, є обмеженими чергами.
- Deque - це черга, яка підтримує вставку та видалення з обох кінців.
- Деке є ниткобезпечним.
- BlockingQueues є потокобезпечними та використовуються для вирішення проблем виробника та споживача.
- BlockingQueues не допускає нульових елементів. NullPointerException викидається, якщо виконується будь-яка операція, пов'язана зі значеннями NULL.
Як використовувати чергу в Java?
Щоб використовувати чергу в Java, спочатку потрібно імпортувати інтерфейс черги наступним чином:
import java.util.queue;
Або
import java.util.*;
Після імпортування ми можемо створити чергу, як показано нижче:
Queue str_queue = new LinkedList ();
Оскільки Черга є інтерфейсом, ми використовуємо клас LinkedList, який реалізує інтерфейс Черги для створення об'єкта черги.
Подібним чином ми можемо створити чергу з іншими конкретними класами.
Queue str_pqueue = new PriorityQueue (); Queue int_queue = new ArrayDeque ();
Тепер, коли об’єкт черги створений, ми можемо ініціалізувати об’єкт черги, надавши йому значення за допомогою методу add, як показано нижче.
str_queue.add(“one”); str_queue.add(“two”); str_queue.add(“three”);
Приклад черги Java
import java.util.*; public class Main { public static void main(String[] args) { //declare a Queue Queue str_queue = new LinkedList(); //initialize the queue with values str_queue.add('one'); str_queue.add('two'); str_queue.add('three'); str_queue.add('four'); //print the Queue System.out.println('The Queue contents:' + str_queue); } }
Вихід:
Зміст черги: [один, два, три, чотири]
У наведеному вище прикладі показано оголошення та ініціалізацію об’єкта Черги. Потім ми просто друкуємо вміст черги.
Методи черги в Java
У цьому розділі ми обговоримо методи API для черги. Інтерфейс черги підтримує різні операції, такі як вставка, видалення, заглядання тощо. Деякі операції викликають виняток, тоді як деякі повертають певне значення, коли метод успішний або невдалий.
Зверніть увагу, що в колекції черг у Java 8. немає особливих змін. Наведені нижче методи також доступні в пізніших версіях Java, таких як Java 9 тощо.
У наведеній нижче таблиці узагальнено всі ці методи.
Метод | Метод-прототип | Опис |
---|---|---|
розмір | розмір int () | Повертає розмір або кількість елементів у черзі. |
додати | логічне додавання (E e) | Додає елемент e до черги в кінці (хвості) черги, не порушуючи обмеження пропускної здатності. Повертає true, якщо успіх, або IllegalStateException, якщо потужність вичерпана. |
зазирнути | E peek () | Повертає головку (спереду) черги, не видаляючи її. |
елемент | Е-елемент () | Виконує ту саму операцію, що і метод peek (). Викидає NoSuchElementException, коли черга порожня. |
видалити | E вилучити () | Видаляє заголовок черги та повертає його. Викидає NoSuchElementException, якщо черга порожня. |
опитування | Електронне опитування () | Видаляє заголовок черги та повертає його. Якщо черга порожня, вона повертає нуль. |
Пропозиція | логічна пропозиція (E e) | Вставте новий елемент e у чергу, не порушуючи обмеження пропускної здатності. |
Ітерація елементів черги
Ми можемо обходити елементи черги або за допомогою циклу forEach, або за допомогою ітератора. Програма, наведена нижче, реалізує обидва підходи для проходження черги.
import java.util.*; public class Main { public static void main(String[] args) { //declare a Queue Queue LL_queue = new LinkedList(); //initialize the Queue LL_queue.add('Value-0'); LL_queue.add('Value-1'); LL_queue.add('Value-2'); LL_queue.add('Value-3'); //traverse the Queue using Iterator System.out.println('The Queue elements through iterator:'); Iterator iterator = LL_queue.iterator(); while(iterator.hasNext()){ String element = (String) iterator.next(); System.out.print(element + ' '); } System.out.println('
The Queue elements using for loop:'); //use new for loop to traverse the Queue for(Object object : LL_queue) { String element = (String) object; System.out.print(element + ' '); } } }
Вихід:
Елементи черги через ітератор:
Значення-0 Значення-1 Значення-2 Значення-3
Елементи черги, що використовують цикл for:
Значення-0 Значення-1 Значення-2 Значення-3
Реалізація черги Java
Програма нижче демонструє методи, які ми обговорювали вище.
import java.util.*; public class Main { public static void main(String[] args) { Queue q1 = new LinkedList(); //Add elements to the Queue q1.add(10); q1.add(20); q1.add(30); q1.add(40); q1.add(50); System.out.println('Elements in Queue:'+q1); //remove () method =>removes first element from the queue System.out.println('Element removed from the queue: '+q1.remove()); //element() => returns head of the queue System.out.println('Head of the queue: '+q1.element()); //poll () => removes and returns the head System.out.println('Poll():Returned Head of the queue: '+q1.poll()); //returns head of the queue System.out.println('peek():Head of the queue: '+q1.peek()); //print the contents of the Queue System.out.println('Final Queue:'+q1); } }
Вихід:
Елементи в черзі: [10, 20, 30, 40, 50]
Елемент вилучено з черги: 10
Начальник черги: 20
Опитування (): Повернувся Начальник черги: 20
peek (): Начальник черги: 30
Остаточна черга: [30, 40, 50]
як відкрити файл jar
Реалізація масиву черги Java
Реалізація черги не така проста, як реалізація стека. Перш за все, черга містить два покажчики, задній і передній. Крім того, різні операції виконуються на двох різних кінцях.
Для реалізації черги з використанням масивів спочатку оголошуємо масив, який міститиме n кількості елементів черги.
Потім ми визначаємо такі операції, які потрібно виконати в цій черзі.
# 1) Черга: Операцією вставки елемента в чергу є Enqueue (функція queueEnqueue у програмі). Щоб вставити елемент на задній частині, нам слід спочатку перевірити, чи черга заповнена. Якщо він заповнений, тоді ми не можемо вставити елемент. Якщо задній # 2) Зменшення черги: Операція видалення елемента з черги - Dequeue (функція queueDequeue у програмі). Спочатку перевіряємо, чи порожня черга. Щоб операція зняття черги працювала, у черзі повинен бути принаймні один елемент. # 3) Спереду: Цей метод повертає фронт черги. # 4) Дисплей: Цей метод здійснює обхід черги та відображає елементи черги. Наступна програма Java демонструє реалізацію масиву Queue. Вихід: Початкова черга: Оскільки ми впровадили структуру даних Черги за допомогою масивів у вищезазначеній програмі, ми також можемо реалізувати Чергу за допомогою пов’язаного списку. Ми застосуємо ті самі методи enqueue, dequeue, front і display у цій програмі. Різниця полягає в тому, що ми будемо використовувати структуру даних Linked List замість Array. Наведена нижче програма демонструє реалізацію зв’язаного списку черги в Java. Вихід: Елемент 6 доданий до черги BlockingQueue - це інтерфейс, доданий в Java 1.5 і є частиною java.util.concurrent пакет. Цей інтерфейс вводить блокування у випадку, якщо BlockingQueue заповнений або порожній. Таким чином, коли потік отримує доступ до черги і намагається вставити (занести в чергу) елементи у черзі, яка вже заповнена, блокується, поки інший потік не створює простір у черзі (можливо, за допомогою операції зняття черги або очищення черги). Подібним чином, у разі зняття черги, операція блокується, якщо черга порожня, поки елемент не стане доступним для операції скидання. Методи BlockingQueue використовують певну форму контролю паралельності, наприклад, внутрішні блокування, і є атомними. BlockingQueue - це паралельна черга, яка одночасно керує операціями з чергою. Черга блокування показана нижче: Зверніть увагу, що BlockingQueue не приймає нульові значення. Спроба вставити нульове значення в чергу призводить до NullPointerException. Деякі реалізації BlockingQueue, передбачені в Java, - LinkedBlockingQueue, PriorityBlockingQueue, ArrayBlockingQueue і SynchonousQueue. Всі ці реалізації безпечні для потоку. BlockingQueues бувають двох типів: У обмеженій черзі ємність черги передається конструктору черги. Декларація черги така: BlockingQueue blockingQueue = новий LinkedBlockingDeque (5); У необмеженій черзі ми не встановлюємо явно місткість черги, і вона може збільшитися в розмірі. Ємність встановлена в Integer.MAX_VALUE. Оголошення необмеженої черги таке: BlockingQueue blockingQueue = новий LinkedBlockingDeque (); Інтерфейс BlockingQueue в основному використовується для проблем виробник-споживач, коли виробник виробляє ресурси, а споживач споживає ресурси. Q # 1) Що таке Черга в Java? Відповідь: Черга в Java - це лінійна впорядкована структура даних, яка слідує за впорядкуванням елементів FIFO (First In, First Out). Це означає, що елемент, вставлений першим у чергу, буде першим елементом, який потрібно видалити. У Java черга реалізована як інтерфейс, який успадковує інтерфейс Collection. Q # 2) Чи Java безпечна для потокової черги? Відповідь: Не всі черги є потокобезпечними, але BlockingQueues у Java безпечні для потоку. Q # 3) Що швидше - стек або черга? Відповідь: Стек швидший. У стосі елементи обробляються лише з одного кінця, отже, не потрібно переміщення. Але в черзі елементи потрібно зміщувати та коригувати, оскільки є два різні вказівники для вставки та видалення елементів. Q # 4) Які типи черги? Відповідь: Черги бувають таких типів: Q # 5) Чому використовується Черга? Відповідь: Структура даних черги використовується для цілей синхронізації. Черга також використовується для планування дисків та процесора. У цьому підручнику ми обговорили прості черги разом з їх деталями, такими як оголошення, реалізація ініціалізації та методи. Ми також дізналися про реалізацію Array та LinkedList Queue в Java. У наших майбутніх підручниках ми детально обговоримо більше типів черг. => Перевірте ВСІ підручники Java тут. class Queue { private static int front, rear, capacity; private static int queue[]; Queue(int size) { front = rear = 0; capacity = size; queue = new int[capacity]; } // insert an element into the queue static void queueEnqueue(int item) { // check if the queue is full if (capacity == rear) { System.out.printf('
Queue is full
'); return; } // insert element at the rear else { queue[rear] = item; rear++; } return; } //remove an element from the queue static void queueDequeue() { // check if queue is empty if (front == rear) { System.out.printf('
Queue is empty
'); return; } // shift elements to the right by one place uptil rear else { for (int i = 0; i
Черга порожня
Черга після роботи в черзі:
10 = 30 = 50 = 70 =
Передній елемент черги: 10
Черга заповнена
10 = 30 = 50 = 70 =
Черга після двох операцій скидання: 50 = 70 =
Передній елемент черги: 50Реалізація пов'язаного списку Java Queue
class LinkedListQueue { private Node front, rear; private int queueSize; // queue size //linked list node private class Node { int data; Node next; } //default constructor - initially front & rear are null; size=0; queue is empty public LinkedListQueue() { front = null; rear = null; queueSize = 0; } //check if the queue is empty public boolean isEmpty() { return (queueSize == 0); } //Remove item from the front of the queue. public int dequeue() { int data = front.data; front = front.next; if (isEmpty()) { rear = null; } queueSize--; System.out.println('Element ' + data+ ' removed from the queue'); return data; } //Add data at the rear of the queue. public void enqueue(int data) { Node oldRear = rear; rear = new Node(); rear.data = data; rear.next = null; if (isEmpty()) { front = rear; } else { oldRear.next = rear; } queueSize++; System.out.println('Element ' + data+ ' added to the queue'); } //print front and rear of the queue public void print_frontRear() { System.out.println('Front of the queue:' + front.data + ' Rear of the queue:' + rear.data); } } class Main{ public static void main(String a[]){ LinkedListQueue queue = new LinkedListQueue(); queue.enqueue(6); queue.enqueue(3); queue.print_frontRear(); queue.enqueue(12); queue.enqueue(24); queue.dequeue(); queue.dequeue(); queue.enqueue(9); queue.print_frontRear(); } }
Елемент 3 доданий до черги
Передня частина черги: 6 Задня черга: 3
Елемент 12 додано в чергу
Елемент 24 доданий до черги
Елемент 6 вилучено з черги
Елемент 3 вилучено з черги
Елемент 9 додано в чергу
Передня частина черги: 12 Задня частина черги: 9BlockingQueue в Java
Типи черги блокування
Обмежена черга
Необмежена черга
Часті запитання
Висновок
Рекомендована література