대기열 인터페이스는 다음 위치에 있습니다. java.util 패키지를 확장하고 컬렉션 인터페이스 FIFO(선입선출) 순서로 처리될 요소를 보유하는 데 사용됩니다. 목록 끝에 요소를 삽입하고 목록 시작 부분에서 요소를 삭제하는 것으로 제한된 용도로 사용되는 개체의 순서가 지정된 목록입니다. FIFO 또는 선입선출 원칙.

인터페이스이기 때문에 큐에는 선언을 위한 구체적인 클래스가 필요하며 가장 일반적인 클래스는 다음과 같습니다. 우선순위 대기열 그리고 링크드리스트 자바에서. 이러한 구현 중 어느 것도 스레드로부터 안전하지 않습니다. 우선순위차단큐 스레드로부터 안전한 구현이 필요한 경우 대체 구현 중 하나입니다.
선언: Queue 인터페이스는 다음과 같이 선언됩니다.
public interface Queue extends Collection>
대기열 개체 생성: 부터 대기줄 이다 상호 작용 , 대기열 유형의 개체를 만들 수 없습니다. 객체를 생성하려면 항상 이 목록을 확장하는 클래스가 필요합니다. 또한, 도입 이후에는 제네릭 Java 1.5에서는 대기열에 저장할 수 있는 객체 유형을 제한하는 것이 가능합니다. 이 유형 안전 큐는 다음과 같이 정의할 수 있습니다.
// Obj is the type of the object to be stored in Queue Queue queue = new PriorityQueue ();>
Java에서 Queue 인터페이스는 Collection 인터페이스의 하위 유형이며 특정 순서로 요소 컬렉션을 나타냅니다. 이는 FIFO(선입선출) 원칙을 따릅니다. 즉, 요소가 큐에 추가된 순서대로 검색됩니다.
Queue 인터페이스는 대기열의 요소를 추가, 제거 및 검사하기 위한 여러 메서드를 제공합니다. 가장 일반적으로 사용되는 방법은 다음과 같습니다.
add(element): 대기열의 뒤쪽에 요소를 추가합니다. 대기열이 가득 차면 예외가 발생합니다.
Offer(element): 대기열 뒤쪽에 요소를 추가합니다. 대기열이 가득 차면 false를 반환합니다.
Remove(): 대기열의 맨 앞에 있는 요소를 제거하고 반환합니다. 대기열이 비어 있으면 예외가 발생합니다.
poll(): 큐의 맨 앞에 있는 요소를 제거하고 반환합니다. 대기열이 비어 있으면 null을 반환합니다.
element(): 대기열의 맨 앞에 있는 요소를 제거하지 않고 반환합니다. 대기열이 비어 있으면 예외가 발생합니다.
peek(): 대기열의 맨 앞에 있는 요소를 제거하지 않고 반환합니다. 대기열이 비어 있으면 null을 반환합니다.
Queue 인터페이스는 LinkedList, ArrayDeque 및 PriorityQueue를 포함하여 Java의 여러 클래스에 의해 구현됩니다. 이러한 각 클래스는 다양한 성능 특성과 기능을 갖춘 다양한 대기열 인터페이스 구현을 제공합니다.
전반적으로 Queue 인터페이스는 특정 순서로 요소 컬렉션을 관리하는 데 유용한 도구이며 다양한 응용 프로그램 및 산업에서 널리 사용됩니다.
예:
자바
import> java.util.LinkedList;> import> java.util.Queue;> public> class> QueueExample {> >public> static> void> main(String[] args) {> >Queue queue =>new> LinkedList();> >// add elements to the queue> >queue.add(>'apple'>);> >queue.add(>'banana'>);> >queue.add(>'cherry'>);> >// print the queue> >System.out.println(>'Queue: '> + queue);> >// remove the element at the front of the queue> >String front = queue.remove();> >System.out.println(>'Removed element: '> + front);> >// print the updated queue> >System.out.println(>'Queue after removal: '> + queue);> >// add another element to the queue> >queue.add(>'date'>);> >// peek at the element at the front of the queue> >String peeked = queue.peek();> >System.out.println(>'Peeked element: '> + peeked);> >// print the updated queue> >System.out.println(>'Queue after peek: '> + queue);> >}> }> |
>
>산출
Queue: [apple, banana, cherry] Removed element: apple Queue after removal: [banana, cherry] Peeked element: banana Queue after peek: [banana, cherry, date]>
예: 대기줄
자바
자바의 소수 프로그램
// Java program to demonstrate a Queue> import> java.util.LinkedList;> import> java.util.Queue;> public> class> QueueExample {> >public> static> void> main(String[] args)> >{> >Queue q> >=>new> LinkedList();> >// Adds elements {0, 1, 2, 3, 4} to> >// the queue> >for> (>int> i =>0>; i <>5>; i++)> >q.add(i);> >// Display contents of the queue.> >System.out.println(>'Elements of queue '> >+ q);> >// To remove the head of queue.> >int> removedele = q.remove();> >System.out.println(>'removed element-'> >+ removedele);> >System.out.println(q);> >// To view the head of queue> >int> head = q.peek();> >System.out.println(>'head of queue-'> >+ head);> >// Rest all methods of collection> >// interface like size and contains> >// can be used with this> >// implementation.> >int> size = q.size();> >System.out.println(>'Size of queue-'> >+ size);> >}> }> |
>
>산출
Elements of queue [0, 1, 2, 3, 4] removed element-0 [1, 2, 3, 4] head of queue-1 Size of queue-4>
대기열 인터페이스 작업
다음을 사용하여 대기열에서 자주 사용되는 몇 가지 작업을 수행하는 방법을 살펴보겠습니다. 우선순위 대기열 클래스 .
1. 요소 추가: 큐에 요소를 추가하기 위해 다음을 사용할 수 있습니다. add() 메소드 . 게재 신청서는 PriorityQueue에 유지되지 않습니다. 요소는 기본적으로 오름차순인 우선순위에 따라 저장됩니다.
예
자바
// Java program to add elements> // to a Queue> import> java.util.*;> public> class> GFG {> >public> static> void> main(String args[])> >{> >Queue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >System.out.println(pq);> >}> }> |
>
>산출
[For, Geeks, Geeks]>
2. 요소 제거: 큐에서 요소를 제거하려면 다음을 사용할 수 있습니다. 제거() 메소드. 그러한 객체가 여러 개 있는 경우 해당 객체의 첫 번째 발생이 제거됩니다. 그 외에도 헤드를 제거하고 반환하는 데에도 poll() 메서드가 사용됩니다.
예
자바
// Java program to remove elements> // from a Queue> import> java.util.*;> public> class> GFG {> >public> static> void> main(String args[])> >{> >Queue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >System.out.println(>'Initial Queue '> + pq);> >pq.remove(>'Geeks'>);> >System.out.println(>'After Remove '> + pq);> >System.out.println(>'Poll Method '> + pq.poll());> >System.out.println(>'Final Queue '> + pq);> >}> }> |
>
클라우드 컴퓨팅 애플리케이션
>산출
Initial Queue [For, Geeks, Geeks] After Remove [For, Geeks] Poll Method For Final Queue [Geeks]>
3. 대기열 반복: 대기열을 반복하는 방법에는 여러 가지가 있습니다. 가장 유명한 방법은 대기열을 배열로 변환하고 for 루프를 사용하여 순회하는 것입니다. 그러나 큐에는 큐를 반복하는 데 사용할 수 있는 내장 반복자가 있습니다.
예
자바
// Java program to iterate elements> // to a Queue> import> java.util.*;> public> class> GFG {> >public> static> void> main(String args[])> >{> >Queue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >Iterator iterator = pq.iterator();> >while> (iterator.hasNext()) {> >System.out.print(iterator.next() +>' '>);> >}> >}> }> |
>
>산출
For Geeks Geeks>
대기열의 특성: 큐의 특징은 다음과 같습니다.
- 대기열은 대기열 끝에 요소를 삽입하는 데 사용되며 대기열의 시작 부분에서 제거됩니다. FIFO 개념을 따릅니다.
- Java Queue는 삽입, 삭제 등을 포함한 Collection 인터페이스의 모든 메소드를 지원합니다.
- 링크드리스트 , ArrayBlockingQueue 및 우선순위 대기열 가장 자주 사용되는 구현입니다.
- BlockingQueues에서 null 작업이 수행되면 NullPointerException이 발생합니다.
- java.util 패키지에서 사용 가능한 대기열은 제한되지 않은 대기열입니다.
- java.util.concurrent 패키지에서 사용 가능한 대기열은 제한된 대기열입니다.
- Deque를 제외한 모든 대기열은 각각 대기열의 꼬리와 머리에서 삽입 및 제거를 지원합니다. Deques는 양쪽 끝에서 요소 삽입 및 제거를 지원합니다.
대기열 인터페이스를 구현하는 클래스:
1. 우선순위 대기열: 컬렉션 프레임워크에 구현된 PriorityQueue 클래스는 우선순위에 따라 객체를 처리하는 방법을 제공합니다. 대기열은 선입선출(First-In-First-Out) 알고리즘을 따르는 것으로 알려져 있지만 때때로 대기열의 요소를 우선순위에 따라 처리해야 할 때가 있는데, 이때 PriorityQueue가 작동합니다. 이 클래스를 사용하여 대기열 객체를 생성하는 방법을 살펴보겠습니다.
예
자바
// Java program to demonstrate the> // creation of queue object using the> // PriorityQueue class> import> java.util.*;> class> GfG {> >public> static> void> main(String args[])> >{> >// Creating empty priority queue> >Queue pQueue> >=>new> PriorityQueue();> >// Adding items to the pQueue> >// using add()> >pQueue.add(>10>);> >pQueue.add(>20>);> >pQueue.add(>15>);> >// Printing the top element of> >// the PriorityQueue> >System.out.println(pQueue.peek());> >// Printing the top element and removing it> >// from the PriorityQueue container> >System.out.println(pQueue.poll());> >// Printing the top element again> >System.out.println(pQueue.peek());> >}> }> |
>
>산출
임의의 SQL로 주문
10 10 15>
2. 연결 목록: LinkedList는 본질적으로 다음을 구현하는 컬렉션 프레임워크에서 구현되는 클래스입니다. 예
자바
// Java program to demonstrate the> // creation of queue object using the> // LinkedList class> import> java.util.*;> class> GfG {> >public> static> void> main(String args[])> >{> >// Creating empty LinkedList> >Queue ll> >=>new> LinkedList();> >// Adding items to the ll> >// using add()> >ll.add(>10>);> >ll.add(>20>);> >ll.add(>15>);> >// Printing the top element of> >// the LinkedList> >System.out.println(ll.peek());> >// Printing the top element and removing it> >// from the LinkedList container> >System.out.println(ll.poll());> >// Printing the top element again> >System.out.println(ll.peek());> >}> }> |
>
>산출
10 10 20>
삼. 우선순위차단큐: PriorityQueue 및 LinkedList 구현 모두 스레드로부터 안전하지 않습니다. PriorityBlockingQueue는 스레드로부터 안전한 구현이 필요한 경우 대체 구현 중 하나입니다. PriorityBlockingQueue는 클래스와 동일한 순서 규칙을 사용하는 무제한 차단 대기열입니다. 우선순위 대기열 차단 검색 작업을 제공합니다.
제한이 없기 때문에 리소스 소모로 인해 요소 추가가 실패하는 경우가 있습니다. 메모리 부족오류 . 이 클래스를 사용하여 대기열 객체를 생성하는 방법을 살펴보겠습니다.
예
자바
삽입 정렬 자바
// Java program to demonstrate the> // creation of queue object using the> // PriorityBlockingQueue class> import> java.util.concurrent.PriorityBlockingQueue;> import> java.util.*;> class> GfG {> >public> static> void> main(String args[])> >{> >// Creating empty priority> >// blocking queue> >Queue pbq> >=>new> PriorityBlockingQueue();> >// Adding items to the pbq> >// using add()> >pbq.add(>10>);> >pbq.add(>20>);> >pbq.add(>15>);> >// Printing the top element of> >// the PriorityBlockingQueue> >System.out.println(pbq.peek());> >// Printing the top element and> >// removing it from the> >// PriorityBlockingQueue> >System.out.println(pbq.poll());> >// Printing the top element again> >System.out.println(pbq.peek());> >}> }> |
>
>산출
10 10 15>
대기열 인터페이스 방법
대기열 인터페이스는 대기열 인터페이스에 있는 모든 메서드를 상속합니다. 컬렉션 인터페이스 다음 방법을 구현하는 동안:
| 방법 | 설명 |
|---|---|
| add(int 인덱스, 요소) | 이 메소드는 큐의 특정 인덱스에 요소를 추가하는 데 사용됩니다. 단일 매개변수가 전달되면 단순히 대기열 끝에 요소를 추가합니다. |
| addAll(int 인덱스, 컬렉션 컬렉션) | 이 메소드는 지정된 컬렉션의 모든 요소를 큐에 추가하는 데 사용됩니다. 단일 매개변수가 전달되면 지정된 컬렉션의 모든 요소가 대기열 끝에 추가됩니다. |
| 크기() | 이 메소드는 큐의 크기를 반환하는 데 사용됩니다. |
| 분명한() | 이 메서드는 대기열의 모든 요소를 제거하는 데 사용됩니다. 그러나 생성된 큐의 참조는 계속 저장됩니다. |
| 제거하다() | 이 메소드는 큐의 맨 앞에서 요소를 제거하는 데 사용됩니다. |
| 제거(int 인덱스) | 이 메서드는 지정된 인덱스에서 요소를 제거합니다. 후속 요소(있는 경우)를 왼쪽으로 이동하고 해당 인덱스를 1씩 감소시킵니다. |
| 제거(요소) | 이 메소드는 큐에서 주어진 요소의 첫 번째 발생을 제거하고 반환하는 데 사용됩니다. |
| get(정수 인덱스) | 이 메서드는 지정된 인덱스의 요소를 반환합니다. |
| set(int 인덱스, 요소) | 이 메서드는 지정된 인덱스의 요소를 새 요소로 바꿉니다. 이 함수는 방금 새 요소로 대체된 요소를 반환합니다. |
| indexOf(요소) | 이 메소드는 주어진 요소의 첫 번째 발생을 반환합니다. -1 요소가 대기열에 존재하지 않는 경우. |
| lastIndexOf(요소) | 이 메소드는 주어진 요소의 마지막 발생을 반환합니다. -1 요소가 대기열에 존재하지 않는 경우. |
| 같음(요소) | 이 메서드는 지정된 요소와 대기열 요소의 동일성을 비교하는 데 사용됩니다. |
| 해시 코드() | 이 메소드는 주어진 큐의 해시코드 값을 반환하는 데 사용됩니다. |
| 비었다() | 이 메소드는 큐가 비어 있는지 확인하는 데 사용됩니다. 대기열이 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
| 포함(요소) | 이 메소드는 큐에 지정된 요소가 포함되어 있는지 확인하는 데 사용됩니다. 대기열에 요소가 포함되어 있으면 true를 반환합니다. |
| containAll(컬렉션 컬렉션) | 이 메소드는 큐에 모든 요소 컬렉션이 포함되어 있는지 확인하는 데 사용됩니다. |
| sort(비교기 비교) | 이 메소드는 주어진 기준에 따라 큐의 요소를 정렬하는 데 사용됩니다. 비교기 . |
| 부울 추가(객체) | 이 메서드는 지정된 요소를 대기열에 삽입하고 성공 시 true를 반환하는 데 사용됩니다. |
| 부울 제안(객체) | 이 메소드는 지정된 요소를 큐에 삽입하는 데 사용됩니다. |
| 객체 폴링() | 이 메소드는 대기열의 헤드를 검색 및 제거하는 데 사용되며, 대기열이 비어 있으면 null을 반환합니다. |
| 객체요소() | 이 메소드는 큐의 헤드를 검색하는 데 사용되지만 제거하지는 않습니다. |
| 객체 엿보기() | 이 메소드는 이 큐의 헤드를 검색하는 데 사용되지만 제거하지는 않습니다. 또는 이 큐가 비어 있는 경우 null을 반환합니다. |
Java에서 Queue 인터페이스를 사용하면 다음과 같은 이점이 있습니다.
주문 보존 : Queue 인터페이스는 FIFO(선입선출) 원칙에 따라 특정 순서로 요소를 저장하고 검색하는 방법을 제공합니다.
유연성 : Queue 인터페이스는 Collection 인터페이스의 하위 유형입니다. 즉, 애플리케이션의 요구 사항에 따라 다양한 데이터 구조 및 알고리즘과 함께 사용할 수 있습니다.
실 – 안전 : java.util.concurrent.ConcurrentLinkedQueue 클래스와 같은 Queue 인터페이스의 일부 구현은 스레드로부터 안전합니다. 즉, 충돌을 일으키지 않고 여러 스레드에서 동시에 액세스할 수 있습니다.
성능 : Queue 인터페이스는 요소 추가, 제거 및 검사를 위한 효율적인 구현을 제공하므로 성능이 중요한 애플리케이션에서 요소 컬렉션을 관리하는 데 유용한 도구입니다.
Java에서 Queue 인터페이스를 사용할 때의 단점:
제한된 기능: Queue 인터페이스는 특정 순서로 요소 컬렉션을 관리하기 위해 특별히 설계되었습니다. 즉, 더 복잡한 데이터 구조나 알고리즘에는 적합하지 않을 수 있습니다.
크기 제한: ArrayDeque 클래스와 같은 일부 Queue 인터페이스 구현은 고정된 크기를 가지므로 특정 요소 수 이상으로 커질 수 없습니다.
메모리 사용량: 구현에 따라 Queue 인터페이스는 다른 데이터 구조보다 더 많은 메모리를 요구할 수 있으며, 특히 요소 순서에 대한 추가 정보를 저장해야 하는 경우 더욱 그렇습니다.
복잡성 : Queue 인터페이스는 초보 프로그래머가 사용하고 이해하기 어려울 수 있습니다. 특히 데이터 구조 및 알고리즘의 원리에 익숙하지 않은 경우 더욱 그렇습니다.