티스토리 뷰
728x90
우선순위 큐
- 우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조
- 데이터를 우선순위에 따라 처리하고 싶을 때 사용
- 대표적인 우선순위 구현 방법 : 리스트, 힙(heap) 자료구조
- → 힙 자료구조를 사용할 때 삽입&삭제 모두 O(logN)
힙(Heap) 자료구조
- 완전 이진트리 자료구조의 일종
- 항상 루트 노드를 제거한다.
- 최소 힙 (min heap)
- 루트 노드가 가장 작은 값을 가진다
- 값이 작은 데이터가 우선적으로 제거된다
- 최소 힙 구성 함수 : Min-Heapify()
- 최대 힙 (max heap)
- 루트 노드가 가장 큰 값을 가진다
- 값이 큰 데이터가 우선적으로 제거된다
🅰️ Heap
더미, 쌓다, 수많은, 엄청난
완전 이진 트리 (Complete Binary Tree)
루트노드부터 시작하여 왼쪽 자식 노드, 오른쪽 자식 노드 순서대로 데이터가 차례대로 삽입되는 트리를 의미
JAVA의 우선순위 큐
import java.util.PriorityQueue;
import java.util.Collections;
// 최소힙 우선순위 큐
PriorityQueue<Integer> pQmin = new ProiroityQueue<>();
// 최대힙 우선순위 큐
PriorityQueue<Integer> pQmax = new PriorityQueue<>(Collections.reverseOrder());
// add
pQmin.add(1);
pQmin.add(10);
pQmin.add(100);
pQmax.add(1);
pQmax.add(10);
pQmax.add(100);
// remove
pQmin.poll(); // 첫번째 값 반환하고 제거. 비어있다면 null 반환
pQmin.remove(); // 첫번째 값 제거. 비어있다면 예외 발생
pQmin.peek(); // 첫번째 값 반환만 하고 제거X. 큐 비어있으면 null 반환
pQmin.element(); //첫번째 값 반환만 하고 제거X. 큐 비어있으면 예외 발생
pQmin.clear(); // 초기화
커스텀 클래스로 우선순위 큐 사용 시
Comparable 인터페이스 구현하여 compareTo를 우선순위에 맞게 override 해줘야 한다.
class Member implements Comparable<Member {
String name;
int age;
Member(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Member o){
return this.age - o.age; // 나이 오름차순 정렬
}
}
public static void main(String[] args){
PriorityQueue<Member> pQ = new PriorityQueue<>();
pQ.add(new Member("김방실", 5));
pQ.add(new Member("김몽실", 4));
pQ.add(new Member("김보리", 2));
pQ.add(new Member("문쭈니", 9));
while(!pQ.isEmpty()){
Member member = pQ.poll();
System.out.println("["+member.name+" "+member.age+"]");
}
}
// 실행결과
김보리 2
김몽실 4
김방실 5
문쭈니 9
참고자료
728x90
'JAVA' 카테고리의 다른 글
Map과 HashTable 알아보고 Java의 HashMap 코드 뜯어보기 (2) | 2023.08.30 |
---|---|
PageRequest, Page, PageImpl (0) | 2023.02.03 |
스프링부트의 다중요청 처리 - Tomcat9 Thread Pool & JAVA NIO (0) | 2022.05.01 |
[Apache POI] SXSSF의 메모리 관리법 : 슬라이딩 윈도우(Sliding Window) (0) | 2022.04.28 |
Java Bean과 Spring Bean (0) | 2022.04.16 |
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java
- springboot
- 샤드
- laravel
- database
- 분산처리
- 리눅스 컨테이너
- 쿠버네티스
- docker
- 몽고디비
- 주니어개발자
- NoSQL
- laravel 테스트코드
- laravel 테스트
- 대규모 데이터 처리
- 도커
- mockery
- 샤딩
- kubernetes
- devops
- 라라벨
- MySQL
- index
- php
- redis
- mongoDB
- k8s
- pods
- 백엔드
- phpUnit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함