개발/Java

[Java] 우선순위 큐

shining park 2024. 10. 30. 14:00

📍선언

//오름차순 우선순위 큐
PriorityQueue<Integer> pq = new PriorityQueue<>();

//내림차순 우선순위 큐
PriorityQueue<Integer> pqRevers = new PriorityQueue<>(Collections.reverseOrder());

 

📍삽입

  • add
  • offer
//삽입
pq.add(5); //삽입 실패 시, Exception 터짐
pq.add(3);
pq.add(9);
pq.offer(4); //삽입 실패 시, Null 리턴
pq.offer(7);

pqRevers.add(5);
pqRevers.add(3);
pqRevers.add(4);
pqRevers.add(9);
pqRevers.offer(4);
pqRevers.offer(7);

System.out.println("pq : " + pq);
System.out.println("pqRevers : " + pqRevers);

 

📍반환

  • peek
  • iterator
  • for
  • size
 //반환
int firstPQ = pq.peek(); //첫번째 데이터 반환, 큐 비어 있다면 Null 리턴
System.out.println("pq first value : " + firstPQ);

Iterator<Integer> iterator = pq.iterator();
System.out.print("pq value _ interator : ");
while(iterator.hasNext()) {
    Integer i = iterator.next(); //데이터 삭제 없이 순회 _ 순서정렬 X
    System.out.print(i + " ");
}

System.out.println();

System.out.println("pq size : " + pq.size());
System.out.print("pq value _ for : ");
int size = pq.size();
for(int i = 0; i < size; i++) { //데이터 삭제 없이 순회 _ 순서정렬 O
    Integer value = pq.poll();
    System.out.print(value + " ");
}

 

📍제거

  • pool
  • remove
  • removeIf
  • clear
System.out.println("origin pqRevers : " + pqRevers);

//제거
pqRevers.poll(); //첫번째 데이터 제거, 제거할 데이터 없으면 Null 리턴
System.out.println("1) pqRevers : " + pqRevers);

pqRevers.remove(); //첫번째 데이터 제거, 제거할 데이터 없으면 Exception 터짐
System.out.println("2) pqRevers : " + pqRevers);

pqRevers.remove(4); //특정 데이터와 일치하는 첫번째 데이터 제거, 제거하려는 데이터 없으면 false 리턴
System.out.println("3) pqRevers : " + pqRevers);

pqRevers.removeIf(n -> (n%2 == 0)); //조건식으로 데이터 제거, 제거하려는 조건에 맞는 데이터 없으면 제거 X
System.out.println("4) pqRevers : " + pqRevers);

pqRevers.clear(); //전체 데이터 제거
System.out.println("5) pqRevers : " + pqRevers);