java queue queue methods
이 자습서에서는 Java의 대기열이란 무엇입니까, 사용 방법, Java 대기열 예제, Java 대기열 방법 및 대기열 인터페이스 구현에 대해 설명합니다.
큐는 FIFO (선입 선출) 순서로 요소를 저장하는 Java의 선형 데이터 구조 또는 컬렉션입니다.
대기열 컬렉션에는 앞뒤 두 개의 끝이 있습니다. 요소는 후면에 추가되고 전면에서 제거됩니다.
=> 모두를위한 Java 교육 시리즈를 보려면 여기를 방문하십시오.
학습 내용 :
Java 대기열이란?
큐 데이터 구조는 다음과 같이 표시됩니다.
위의 다이어그램에서 볼 수 있듯이 대기열은 시작 (앞)과 끝 (뒤)의 두 지점이있는 구조입니다. 요소는 뒤쪽 끝의 대기열에 삽입되고 앞쪽의 대기열에서 제거됩니다.
Java에서 Queue는 java.util 패키지의 일부인 인터페이스입니다. 큐 인터페이스는 Java Collection 인터페이스를 확장합니다.
Queue 인터페이스의 일반적인 정의는 다음과 같습니다.
public interface Queue extends Collection
큐는 인터페이스이므로 인스턴스화 할 수 없습니다. Queue 인터페이스의 기능을 구현하려면 구체적인 클래스가 필요합니다. 두 클래스는 Queue 인터페이스, 즉 LinkedList 및 PriorityQueue를 구현합니다.
다음은 Queue 데이터 구조의 몇 가지 주요 특성입니다.
Windows 10 용 최고의 무료 유튜브 다운로더
- 대기열은 FIFO (선입 선출) 순서를 따릅니다. 즉, 요소가 끝에 대기열에 삽입되고 처음에 대기열에서 제거됩니다.
- Java 큐 인터페이스는 삽입, 삭제 등과 같은 Collection 인터페이스의 모든 메소드를 제공합니다.
- LinkedList 및 PriorityQueue는 Queue 인터페이스를 구현하는 클래스입니다. ArrayBlockingQueue는 Queue 인터페이스를 구현하는 또 다른 클래스입니다.
- java.util 패키지의 일부인 큐는 제한되지 않은 큐로 분류 될 수있는 반면 java.util.the 동시 패키지에있는 큐는 바인딩 된 큐로 분류 될 수 있습니다.
- Deque는 양쪽 끝에서 삽입 및 삭제를 지원하는 대기열입니다.
- deque는 스레드로부터 안전합니다.
- BlockingQueues는 스레드로부터 안전하며 생산자-소비자 문제를 구현하는 데 사용됩니다.
- BlockingQueues는 null 요소를 허용하지 않습니다. null 값과 관련된 작업이 시도되면 NullPointerException이 throw됩니다.
Java에서 대기열을 사용하는 방법?
Java에서 대기열을 사용하려면 먼저 다음과 같이 대기열 인터페이스를 가져와야합니다.
import java.util.queue;
또는
import java.util.*;
가져 오면 아래와 같이 대기열을 만들 수 있습니다.
Queue str_queue = new LinkedList ();
Queue는 인터페이스이므로 Queue 인터페이스를 구현하는 LinkedList 클래스를 사용하여 대기열 객체를 만듭니다.
마찬가지로, 다른 구체적인 클래스로 큐를 만들 수 있습니다.
Queue str_pqueue = new PriorityQueue (); Queue int_queue = new ArrayDeque ();
이제 큐 객체가 생성되었으므로 아래와 같이 add 메소드를 통해 값을 제공하여 큐 객체를 초기화 할 수 있습니다.
str_queue.add(“one”); str_queue.add(“two”); str_queue.add(“three”);
자바 대기열 예
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); } }
산출:
대기열 내용 : (하나, 둘, 셋, 넷)
위의 예는 Queue 객체의 선언 및 초기화를 보여줍니다. 그런 다음 대기열의 내용을 인쇄합니다.
자바의 큐 메소드
이 섹션에서는 큐에 대한 API 메서드에 대해 설명합니다. 큐 인터페이스는 삽입, 삭제, 엿보기 등과 같은 다양한 작업을 지원합니다. 일부 작업은 예외를 발생시키고 일부 작업은 메서드가 성공하거나 실패 할 때 특정 값을 반환합니다.
Java 8의 Queue 컬렉션에는 특별한 변경 사항이 없습니다. 아래 메소드는 Java 9 등과 같은 Java의 이후 버전에서도 사용할 수 있습니다.
아래 표에는 이러한 모든 방법이 요약되어 있습니다.
방법 | 방법 프로토 타입 | 기술 |
---|---|---|
크기 | int 크기 () | 큐에있는 요소의 크기 또는 수를 반환합니다. |
더하다 | 부울 추가 (E e) | 용량 제한을 위반하지 않고 대기열의 끝 (꼬리)에있는 대기열에 요소 e를 추가합니다. 성공하면 true를, 용량이 소진되면 IllegalStateException을 반환합니다. |
몰래 엿보다 | E 엿보기 () | 큐를 제거하지 않고 큐의 헤드 (앞쪽)를 반환합니다. |
요소 | E 요소 () | peek () 메서드와 동일한 작업을 수행합니다. 큐가 비어 있으면 NoSuchElementException이 발생합니다. |
없애다 | E remove () | 대기열의 헤드를 제거하고 반환합니다. 큐가 비어있는 경우 NoSuchElementException이 발생합니다. |
투표 | E 투표 () | 대기열의 헤드를 제거하고 반환합니다. 큐가 비어 있으면 null을 반환합니다. |
제공 | 부울 제공 (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
자바 대기열 구현
아래 프로그램은 위에서 논의한 방법을 보여줍니다.
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
Poll () : Returned 대기열 헤드 : 20
peek () : 큐 헤드 : 30
최종 대기열 : (30, 40, 50)
자바 대기열 배열 구현
큐 구현은 스택 구현만큼 간단하지 않습니다. 우선, 대기열에는 뒤쪽과 앞쪽의 두 포인터가 있습니다. 또한 두 개의 다른 끝에서 다른 작업이 수행됩니다.
배열을 사용하여 큐를 구현하려면 먼저 n 개의 큐 요소를 보유 할 배열을 선언합니다.
그런 다음이 대기열에서 수행 할 다음 작업을 정의합니다.
# 1) 대기열에 넣기 : 큐에 요소를 삽입하는 작업은 Enqueue (프로그램의 함수 queueEnqueue)입니다. 뒷부분에 요소를 삽입하려면 먼저 대기열이 가득 찼는 지 확인해야합니다. 가득 차면 요소를 삽입 할 수 없습니다. 후면 # 2) 대기열에서 빼기 : 큐에서 요소를 삭제하는 작업은 Dequeue (프로그램의 함수 queueDequeue)입니다. 먼저 큐가 비어 있는지 확인합니다. 대기열에서 빼기 작업이 작동하려면 대기열에 하나 이상의 요소가 있어야합니다. # 3) 전면 : 이 메서드는 대기열의 앞부분을 반환합니다. # 4) 디스플레이 : 이 메소드는 대기열을 순회하고 대기열의 요소를 표시합니다. 다음 Java 프로그램은 Queue의 배열 구현을 보여줍니다. 산출: 초기 대기열 : 위 프로그램에서 Arrays를 사용하여 Queue 데이터 구조를 구현 했으므로 Linked List를 사용하여 Queue를 구현할 수도 있습니다. 이 프로그램에서 enqueue, dequeue, front 및 display 같은 메소드를 구현합니다. 차이점은 Array 대신 Linked List 데이터 구조를 사용한다는 것입니다. 아래 프로그램은 Java에서 Queue의 Linked List 구현을 보여줍니다. 산출: 대기열에 추가 된 요소 6 BlockingQueue는 Java 1.5에 추가 된 인터페이스이며 java.util.concurrent 꾸러미. 이 인터페이스는 BlockingQueue가 가득 차거나 비어있는 경우 차단을 도입합니다. 따라서 스레드가 큐에 액세스하여 이미 가득 찬 큐에 요소를 삽입 (인큐)하려고하면 다른 스레드가 큐에 공간을 만들 때까지 차단됩니다 (대기열 제거 작업 또는 큐 지우기). 마찬가지로 대기열에서 빼기의 경우 요소를 대기열에서 빼기 작업에 사용할 수있을 때까지 대기열이 비어 있으면 작업이 차단됩니다. BlockingQueue 메서드는 내부 잠금과 같은 일종의 동시성 제어를 사용하며 원자 적입니다. BlockingQueue는 대기열 작업을 동시에 관리하는 동시 대기열입니다. BlockingQueue는 다음과 같습니다. BlockingQueue는 null 값을 허용하지 않습니다. 대기열에 null 값을 삽입하려고하면 NullPointerException이 발생합니다. Java에서 제공되는 BlockingQueue 구현 중 일부는 LinkedBlockingQueue, PriorityBlockingQueue, ArrayBlockingQueue 및 SynchonousQueue입니다. 이러한 모든 구현은 스레드로부터 안전합니다. BlockingQueues에는 두 가지 유형이 있습니다. 바인딩 된 큐에서 큐의 용량은 큐의 생성자에게 전달됩니다. 큐 선언은 다음과 같습니다. BlockingQueue blockingQueue = 새로운 LinkedBlockingDeque (5); 제한되지 않은 대기열에서는 대기열의 용량을 명시 적으로 설정하지 않으며 크기가 커질 수 있습니다. 용량은 Integer.MAX_VALUE로 설정됩니다. 제한되지 않은 큐의 선언은 다음과 같습니다. BlockingQueue blockingQueue = 새로운 LinkedBlockingDeque (); BlockingQueue 인터페이스는 주로 생산자가 리소스를 생산하고 소비자가 리소스를 소비하는 생산자-소비자 유형의 문제에 사용됩니다. Q # 1) Java에서 대기열이란 무엇입니까? 대답: Java의 큐는 요소의 FIFO (선입 선출) 순서를 따르는 선형 순서 데이터 구조입니다. 즉, 대기열에 처음 삽입 된 요소가 제거 될 첫 번째 요소가됩니다. Java에서 큐는 Collection 인터페이스를 상속하는 인터페이스로 구현됩니다. 질문 # 2) 큐 스레드로부터 안전한 Java입니까? 대답: 모든 큐가 스레드로부터 안전하지는 않지만 Java의 BlockingQueues는 스레드로부터 안전합니다. 질문 # 3) 어느 것이 더 빠릅니까? 스택 또는 대기열? 대답: 스택이 더 빠릅니다. 스택에서 요소는 한쪽 끝에서만 처리되므로 이동이 필요하지 않습니다. 그러나 큐에는 요소를 삽입하고 삭제하는 두 가지 다른 포인터가 있으므로 요소를 이동하고 조정해야합니다. 질문 # 4) 대기열 유형은 무엇입니까? 답변 : 대기열 유형은 다음과 같습니다. 질문 # 5) 대기열이 사용되는 이유는 무엇입니까? 대답: 큐 데이터 구조는 동기화 목적으로 사용됩니다. 대기열은 디스크 및 CPU 예약에도 사용됩니다. 이 자습서에서는 선언, 초기화 구현 및 메서드와 같은 세부 정보와 함께 간단한 큐에 대해 설명했습니다. 또한 Java에서 Queue의 Array 및 LinkedList 구현에 대해서도 배웠습니다. 다음 튜토리얼에서는 더 많은 유형의 대기열에 대해 자세히 설명합니다. 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자바 대기열 연결 목록 구현
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 대기열 뒤 : 9자바의 BlockingQueue
BlockingQueue 유형
제한된 대기열
무제한 대기열
자주 묻는 질문
안드로이드를위한 최고의 무료 음악 다운로더
결론
추천 도서