[java] Java에서 Queue 객체를 어떻게 인스턴스화합니까?

내가 시도 할 때 :

Queue<Integer> q = new Queue<Integer>();

컴파일러에서 오류가 발생했습니다. 어떤 도움?

또한 대기열을 초기화하려면 대기열의 메소드를 구현해야합니까?



답변

A Queue는 인터페이스이므로 Queue직접 구성 할 수 없습니다 .

최선의 선택은 이미이 구현하는 클래스 오프 구성하는 Queue다음 중 하나와 같은 인터페이스를 : AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue, 또는 SynchronousQueue.

대안은 필요한 큐 인터페이스를 구현하는 고유 한 클래스를 작성하는 것입니다. 프로그램의 나머지 부분에을 제공하면서 특별한 작업을 수행하려는 드문 경우를 제외하고는 필요하지 않습니다 Queue.

public class MyQueue<T extends Tree> implements Queue<T> {
   public T element() {
     ... your code to return an element goes here ...
   }

   public boolean offer(T element) {
     ... your code to accept a submission offer goes here ...
   }

   ... etc ...
}

덜 사용되는 대안은 구현하는 익명 클래스를 구성하는 것 Queue입니다. 이 작업을 원하지 않을 수도 있지만 모든베이스를 덮기위한 옵션으로 나열되어 있습니다.

new Queue<Tree>() {
   public Tree element() {
     ...
   };

   public boolean offer(Tree element) {
     ...
   };
   ...
};


답변

Queue인터페이스입니다. 익명의 내부 클래스를 통하지 않고 인터페이스를 직접 인스턴스화 할 수 없습니다. 일반적으로 이것은 컬렉션에 대해 수행하려는 것이 아닙니다 . 대신 기존 구현을 선택하십시오. 예를 들면 다음과 같습니다.

Queue<Integer> q = new LinkedList<Integer>();

또는

Queue<Integer> q = new ArrayDeque<Integer>();

일반적으로 관심있는 성능 및 동시성 특성에 따라 컬렉션 구현을 선택합니다.


답변

Queue<String> qe=new LinkedList<String>();

qe.add("b");
qe.add("a");
qe.add("c");

Queue인터페이스 이므로 그림과 같이 인스턴스를 만들 수 없습니다


답변

큐는 인터페이스입니다. 큐를 명시 적으로 구성 할 수 없습니다. 구현 클래스 중 하나를 인스턴스화해야합니다. 다음과 같은 것 :

Queue linkedList = new LinkedList();

다음은이 주제에 대한 Java 학습서 링크입니다.


답변

여기에 이미지 설명을 입력하십시오

큐 인터페이스는 다음과 같은 추가 삽입, 추출 및 검사 조작으로 java.util.Collection을 확장합니다.

+offer(element: E):boolean // 요소 삽입

+poll(): E // 큐가 비어 있으면 요소를 검색하고 NULL을 반환합니다.

+remove(): E// 요소를 가져 와서 제거하고 큐가 비어 있으면 예외를 던집니다.

+peek(): E// 이 큐의 헤드를 검색하지만 제거하지는 않으며이 큐가 비어 있으면 null을 반환합니다.

+element(): E // 큐가 비어 있으면이 큐의 헤드를 검색하지만 제거하지는 않습니다.

큐 구현을위한 예제 코드 :

java.util.Queue<String> queue = new LinkedList<>();
queue.offer("Hello");
queue.offer("StackOverFlow");
queue.offer("User");

System.out.println(queue.peek());

while (queue.size() > 0){
    System.out.println(queue.remove() + " ");
}
//Since Queue is empty now so this will return NULL
System.out.println(queue.peek());

코드 출력 :

Hello
Hello
StackOverFlow
User
null


답변

큐는 자바의 인터페이스이므로 그렇게 할 수 없습니다.

대신 두 가지 옵션이 있습니다.

옵션 1:

Queue<Integer> Q = new LinkedList<>();

옵션 2 :

Queue<Integer> Q = new ArrayDeque<>();

option2는 다른 것보다 약간 빠르므로 사용하는 것이 좋습니다.


답변

Java의 큐 는 인터페이스로 정의되며 JDK 릴리스의 일부로 즉시 사용 가능한 구현이 있습니다. 여기에 몇 가지 :
LinkedList의 , 우선 순위 대기열에 ArrayBlockingQueue, ConcurrentLinkedQueue를, 링크 전송 큐, 동기 큐

SO이 클래스 중 하나를 작성하여 큐 참조로 보유 할 수 있습니다. 예를 들어

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {

 public static void main (String[] args) {
  Queue que = new LinkedList();
  que.add("first");
  que.offer("second");
  que.offer("third");
  System.out.println("Queue Print:: " + que);

  String head = que.element();
  System.out.println("Head element:: " + head);

  String element1 = que.poll();
  System.out.println("Removed Element:: " + element1);

  System.out.println("Queue Print after poll:: " + que);
  String element2 = que.remove();
  System.out.println("Removed Element:: " + element2);

  System.out.println("Queue Print after remove:: " + que);
 }
}

대기열 인터페이스를 구현하는 사용자 지정 대기열을 구현할 수도 있습니다.