본문 바로가기
개발/Java

[Java] PriorityQueue - 우선순위 큐

by 코딩하는 흰둥이 2023. 4. 8.
반응형
우선순위 큐란?

우선순위 큐란 일반적인 큐의 구조 FIFO(First In First Out)를 가지면서

클래스를 생성할때 우선순위를 결정하여 우선순위가 높은 데이터가 먼저 나가도록 하는 자료구조라고 한다.

sort나 reverse와는 다른 구조이니 헷갈리면 안된다


Class 생성
  • 생성 및 추가
	// 오름차순
        PriorityQueue<Integer> lowPriority = new PriorityQueue<>();

        // 내림차순
        PriorityQueue<Integer> highPriority = new PriorityQueue<>(Collections.reverseOrder());

        // 추가
        lowPriority.add(1);
        lowPriority.add(2);
        lowPriority.add(3);

        // 추가
        highPriority.add(1);
        highPriority.add(2);
        highPriority.add(3);

 

  • 출력
        // 오름차순 값 확인
        Iterator<Integer> lowIterator = lowPriority.iterator();
        while(lowIterator.hasNext()){
            System.err.println("lowIterator : " + lowIterator.next());
        }

        // 내림차순 값 확인
        Iterator<Integer> highIterator = highPriority.iterator();
        while(highIterator.hasNext()){
            System.err.println("highIterator : " + highIterator.next());
        }

 

  • 결과

오름차순은 1 - 2 - 3 으로 순차적으로 올라가는 반면

내림차순은 제일 큰 숫자 다음에 입력된 순으로 되어 있다

 


 

큐 삭제
  • 삭제 - poll()
	// 우선순위가 가장 높은 큐를 제거
        highPriority.poll();
        Iterator<Integer> highIterator2 = highPriority.iterator();
        while(highIterator2.hasNext()){
            System.err.println("highIterator2 : " + highIterator2.next());
        }

        System.err.println("---------------------------------------------");

	// 우선순위 큐의 모든 데이터 삭제
        highPriority.clear();
        Iterator<Integer> highIterator3 = highPriority.iterator();
        while(highIterator3.hasNext()){
            System.err.println("highIterator3 : " + highIterator3.next());
        }
        System.err.println("값이 없어서 출력되는게 없음");

 

  • 출력

poll 을 이용하여 우선순위가 높은 큐를 삭제 하였을때 

3이 제거 되고 1 - 2 에서 2 - 1 로 우선 순위가 변경된 것을 볼 수 있다

 

clear 를 이용시 데이터가 없어서 출력되는 값이 없다

 

큐의 출력은 Iterator를 이용해야 한다


 

우선순위 출력
  • peek() 사용
	System.err.println("오름차순 우선순위 : " + lowPriority.peek());
        System.err.println("내림차순 우선순위 : " + highPriority.peek());


제일 기본적인 메서드만 나열하였으며 그 외에 null 값 확인 이나 예외처리의 메서드들은 적어놓지 않았다

댓글