Queue(java프로그래밍 사상 학습)
Queue
대열은 전형적인 선진적인 용기다.대기열은 프로그램의 한 구역에서 다른 구역으로 대상을 전송하는 믿을 만한 경로로 여겨진다.대기열은 병렬 프로그래밍에서 특히 중요하다. 왜냐하면 대상을 한 임무에서 다른 임무로 안전하게 전송할 수 있기 때문이다.LinkedList는 대기열의 행동을 지원하고 Queue 인터페이스를 실현하기 때문에 LinkedList는Queue의 실현으로 사용할 수 있습니다.LinkedList를 Queue로 전환합니다.
import java.util.*;
public class QueueDemo {
public static void printQ(Queue queue) {
while(queue.peek() != null)
System.out.print(queue.remove() + " ");
System.out.println();
}
public static void main(String[] args) {
Queue queue = new LinkedList();
Random rand = new Random(47);
for(int i = 0; i < 10; i++)
queue.offer(rand.nextInt(i + 10));
printQ(queue);
Queue qc = new LinkedList();
for(char c : "Brontosaurus".toCharArray())
qc.offer(c);
printQ(qc);
}
} /* Output:
8 1 1 1 5 14 3 1 0 1
B r o n t o s a u r u s
*///:~
offer () 방법은Queue와 관련된 방법 중 하나입니다. 허용된 상황에서 원소를 팀 끝에 삽입하거나 false로 되돌려줍니다.peek () 와 요소 () 는 모두 제거하지 않은 상태에서 맞은편으로 되돌아오지만,peek () 방법은 대기열이 비어 있을 때null로 되돌아오고 요소 () 는 이상을 던집니다.pool () 과remove () 방법은 그룹 헤더를 제거하고 되돌려줍니다. 그러나 pool () 은 대기열이 비어 있을 때null로 되돌아오고remove () 는 이상을 던집니다.
Queue 인터페이스는 링크드 리스트에 대한 접근 권한을 좁혀서 적당한 방법만 사용할 수 있도록 합니다. 따라서 링크드 리스트에 접근할 수 있는 방법이 적어집니다. (여기서는 실제적으로 Queueue를 링크드 리스트로 전환할 수 있지만, 적어도 우리는 이렇게 하는 것을 권장하지 않습니다.)
Queue와 관련된 방법은 완전하고 독립된 기능을 제공합니다.즉, Queue가 계승하는 Collection에 대해 그 어떠한 방법도 사용할 필요가 없는 상황에서 사용할 수 있는 Queue를 가질 수 있다.
2 Priority
선진적인 선출은 가장 전형적인 대열 규칙을 묘사했다.대기열 규칙이란 글자가 한 그룹의 대기열에 있는 요소를 눌렀을 때 다음 팝업 대기열의 요소를 확정하는 규칙을 가리킨다.선진적으로 먼저 성명을 낸 것은 다음 원소가 가장 오래 기다리는 원소일 것이다.우선 순위 대기열은 다음 팝업 요소가 가장 필요한 요소임을 나타냅니다. (가장 높은 우선 순위가 있습니다.)PriorityQueue에서 offer () 방법을 사용해서 대상을 삽입할 때, 이 대상은 대기열에서 정렬됩니다.기본 정렬은 대기열에 있는 대상의 자연스러운 순서를 사용하지만, 이 순서를 수정할 수 있는 Comparator를 제공할 수 있습니다.PriorityQueue는 peek (),pool (),remove () 방법을 호출할 때 가져오는 요소가 대기열에서 유한한 등급이 가장 높은 요소가 될 수 있도록 합니다.
Priority Queue를 Integer, String, Character 같은 내장 유형과 함께 손바닥을 뒤집듯이 쉽게 사용할 수 있습니다.이 종류들은 이미 자연 순서를 내장했기 때문이다.
import java.util.*;
public class PriorityQueueDemo {
public static void main(String[] args) {
PriorityQueue priorityQueue =
new PriorityQueue();
Random rand = new Random(47);
for(int i = 0; i < 10; i++)
priorityQueue.offer(rand.nextInt(i + 10));
QueueDemo.printQ(priorityQueue);
List ints = Arrays.asList(25, 22, 20,
18, 14, 9, 3, 1, 1, 2, 3, 9, 14, 18, 21, 23, 25);
priorityQueue = new PriorityQueue(ints);
QueueDemo.printQ(priorityQueue);
priorityQueue = new PriorityQueue(
ints.size(), Collections.reverseOrder());
priorityQueue.addAll(ints);
QueueDemo.printQ(priorityQueue);
String fact = "EDUCATION SHOULD ESCHEW OBFUSCATION";
List strings = Arrays.asList(fact.split(""));
PriorityQueue stringPQ =
new PriorityQueue(strings);
QueueDemo.printQ(stringPQ);
// 、
stringPQ = new PriorityQueue(
strings.size(), Collections.reverseOrder());
stringPQ.addAll(strings);
QueueDemo.printQ(stringPQ);
Set charSet = new HashSet();
for(char c : fact.toCharArray())
charSet.add(c); // Autoboxing
PriorityQueue characterPQ =
new PriorityQueue(charSet);
QueueDemo.printQ(characterPQ);
}
} /* Output:
0 1 1 1 1 1 3 5 8 14
1 1 2 3 3 9 9 14 14 18 18 20 21 22 23 25 25
25 25 23 22 21 20 18 18 14 14 9 9 3 3 2 1 1
A A B C C C D D E E E F H H I I L N N O O O O S S S T T U U U W
W U U U T T S S S O O O O N N L I I H H F E E E D D C C C B A A
A B C D E F H I L N O S T U W
*///:~
중복은 허용됩니다. 가장 작은 값이 가장 높은 우선순위를 가지고 있습니다. (String이면 빈칸도 값으로 계산할 수 있고 알파벳보다 우선순위가 높습니다.) 세 번째는PriorityQueue에 대한 구조기 호출이고, 두 번째는PriorityQueue에 대한 호출이Collection에 사용됩니다.reverseOrder()에서 발생하는 역순의 Comparator.마지막 부분에는 중복된 Character를 제거하기 위해 HashSet이 추가되었습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.