logo

Java 대기열 인터페이스

인터페이스 대기열은 java.util 패키지에서 사용할 수 있으며 컬렉션 인터페이스를 확장합니다. FIFO(선입선출) 방식으로 처리되는 요소를 유지하는 데 사용됩니다. 순서가 지정된 개체 목록으로, 목록 끝에 요소 삽입이 발생하고 목록 시작 부분에 요소 제거가 발생합니다.

인터페이스이기 때문에 큐는 선언을 위해 구체적인 클래스가 필요하며 가장 일반적인 클래스는 Java의 LinkedList 및 PriorityQueue입니다. 이러한 클래스에 의해 수행된 구현은 스레드로부터 안전하지 않습니다. 스레드 안전 구현이 필요한 경우 PriorityBlockingQueue를 사용할 수 있습니다.

대기열 인터페이스 선언

 public interface Queue extends Collection 

Java 대기열 인터페이스의 방법

방법 설명
부울 추가(객체) 지정된 요소를 이 대기열에 삽입하고 성공 시 true를 반환하는 데 사용됩니다.
부울 제안(객체) 지정된 요소를 이 대기열에 삽입하는 데 사용됩니다.
객체 제거() 이 큐의 헤드를 검색하고 제거하는 데 사용됩니다.
객체 폴링() 이 큐의 헤드를 검색 및 제거하는 데 사용되며, 이 큐가 비어 있으면 null을 반환합니다.
객체요소() 이 큐의 헤드를 검색하는 데 사용되지만 제거하지는 않습니다.
객체 엿보기() 이 큐의 헤드를 검색하는 데 사용되지만 제거하지는 않으며, 이 큐가 비어 있는 경우 null을 반환합니다.

대기열의 특징

다음은 대기열의 몇 가지 중요한 기능입니다.

  • 앞에서 설명한 것처럼 FIFO 개념은 대기열에서 요소를 삽입하고 삭제하는 데 사용됩니다.
  • Java 큐는 삭제, 삽입 등을 포함하여 Collection 인터페이스의 모든 메소드를 지원합니다.
  • PriorityQueue, ArrayBlockingQueue 및 LinkedList는 가장 자주 사용되는 구현입니다.
  • BlockingQueues에서 null 작업이 수행되면 NullPointerException이 발생합니다.
  • 에 존재하는 대기열 유틸리티 패키지는 무제한 대기열로 알려져 있습니다.
  • 에 존재하는 대기열 유용한 패키지는 제한된 대기열로 알려져 있습니다.
  • Deque를 제외한 모든 대기열은 대기열의 헤드와 테일에서 제거 및 삽입을 용이하게 합니다. 각기. 실제로 deque는 양쪽 끝에서 요소 삽입 및 제거를 지원합니다.

PriorityQueue 클래스

PriorityQueue는 우선순위에 따라 객체를 처리하는 방법을 제공하는 컬렉션 프레임워크에 정의된 클래스이기도 합니다. Java Queue에서 객체의 삽입과 삭제는 FIFO 패턴을 따른다는 것은 이미 설명했습니다. 그러나 때때로 대기열의 요소를 우선순위에 따라 처리해야 할 경우 PriorityQueue가 작동하게 됩니다.

PriorityQueue 클래스 선언

java.util.PriorityQueue 클래스에 대한 선언을 살펴보겠습니다.

 public class PriorityQueue extends AbstractQueue implements Serializable 

Java PriorityQueue 예

파일 이름: TestCollection12.java

 import java.util.*; class TestCollection12{ public static void main(String args[]){ PriorityQueue queue=new PriorityQueue(); queue.add('Amit'); queue.add('Vijay'); queue.add('Karan'); queue.add('Jai'); queue.add('Rahul'); System.out.println('head:'+queue.element()); System.out.println('head:'+queue.peek()); System.out.println('iterating the queue elements:'); Iterator itr=queue.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } queue.remove(); queue.poll(); System.out.println('after removing two elements:'); Iterator itr2=queue.iterator(); while(itr2.hasNext()){ System.out.println(itr2.next()); } } } 
지금 테스트해보세요

산출:

head:Amit head:Amit iterating the queue elements: Amit Jai Karan Vijay Rahul after removing two elements: Karan Rahul Vijay 

Java PriorityQueue 예: 도서

대기열에 책을 추가하고 모든 책을 인쇄하는 PriorityQueue 예제를 살펴보겠습니다. PriorityQueue의 요소는 Comparable 유형이어야 합니다. 문자열 및 래퍼 클래스는 기본적으로 비교 가능합니다. PriorityQueue에 사용자 정의 객체를 추가하려면 Comparable 인터페이스를 구현해야 합니다.

파일 이름: LinkedListExample.java

 import java.util.*; class Book implements Comparable{ int id; String name,author,publisher; int quantity; public Book(int id, String name, String author, String publisher, int quantity) { this.id = id; this.name = name; this.author = author; this.publisher = publisher; this.quantity = quantity; } public int compareTo(Book b) { if(id&gt;b.id){ return 1; }else if(id <b.id){ return -1; }else{ 0; } public class linkedlistexample { static void main(string[] args) queue priorityqueue(); creating books book b1="new" book(121,'let us c','yashwant kanetkar','bpb',8); b2="new" book(233,'operating system','galvin','wiley',6); b3="new" book(101,'data communications & networking','forouzan','mc graw hill',4); adding to the queue.add(b1); queue.add(b2); queue.add(b3); system.out.println('traversing elements:'); traversing elements for(book b:queue){ system.out.println(b.id+' '+b.name+' '+b.author+' '+b.publisher+' '+b.quantity); queue.remove(); system.out.println('after removing one record:'); < pre> <p> <strong>Output:</strong> </p> <pre>Traversing the queue elements: 101 Data Communications &amp; Networking Forouzan Mc Graw Hill 4 233 Operating System Galvin Wiley 6 121 Let us C Yashwant Kanetkar BPB 8 After removing one book record: 121 Let us C Yashwant Kanetkar BPB 8 233 Operating System Galvin Wiley 6 </pre> <hr></b.id){>