내가 시도 할 때 :
Queue<Integer> q = new Queue<Integer>();
컴파일러에서 오류가 발생했습니다. 어떤 도움?
또한 대기열을 초기화하려면 대기열의 메소드를 구현해야합니까?
내가 시도 할 때 :
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
같지만 어쨌든 +1입니다.
ArrayDeque
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
인터페이스 이므로 그림과 같이 인스턴스를 만들 수 없습니다
java.util.Queue
인터페이스입니다. 인터페이스를 인스턴스화 할 수 없습니다. 해당 인터페이스를 구현하는 클래스의 인스턴스를 작성해야합니다. 이 경우 LinkedList는 그러한 클래스입니다.
Stack<String> stack = new Stack<>(); stack.push("a"); stack.push("b"); System.out.println(stack.pop());
import java.util.Stack;
큐 인터페이스는 다음과 같은 추가 삽입, 추출 및 검사 조작으로 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
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);
}
}
대기열 인터페이스를 구현하는 사용자 지정 대기열을 구현할 수도 있습니다.