Queue(java프로그래밍 사상 학습)

4031 단어

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이 추가되었습니다.

좋은 웹페이지 즐겨찾기