Java

[자료구조] Queue 공부하기

무모한 폴라베어 2021. 5. 11. 22:23

 

 

 

처음 자바 강의를 수강했을 때 초반 ~ 중반은 열심히 들었는데 후반에 들어와서는 졸면서 들어서 그런지 후반부의 내용은 기억에 남는 게 별로 없다. 강의 후반부에 들었던 과목 중에 Collection framework도 포함되어있었는데, 자바 강의가 끝나고 Collection framework에 대해서 들었을때 '왜 내가 들은 과정에서는 이걸 안 배웠지?'라고 생각했는데 그건 Collection framework을 놓쳐서 그런 거였다. 아무튼 그래서 오늘은 Queue 와 스택에 대해서 공부하기로 했다. 

 

 

 

 

 


 

 

Queue 

 

First in First Out - FIFO

먼저 들어간 요소가 먼저 나온다.

 

 

  • Collection framework의 인터페이스 중 하나이다.
  • 가장 첫 요소를 front, 가정 끝 요소를 rear이라고 한다.
  • rear에 값을 넣는것을 enqueue, front에서 값을 삭제하는 것을 dequeue라고 한다.
  • 단어의 뜻에 맞게 줄서서 기다리는 작업들의 처리에 사용한다.
    • ex ) 프린트 대기열, 은행업무, 각종 줄 서서 기다리는 작업 등등

 

Queue 선언하기 

 

 Queue<Integer> queue = new LinkedList<>();

 

 

Queue 주요 메서드

 

주요 메서드를 공부하면서 이상했던 점은 큐는 같은 기능을 하는 메서드가 두 개씩 있는 경우가 있었다. 예외처리 부분에서 차이가 있었다.

 

 

Overflow(꽉 찬 상태) Underflow(빈 상태) 에서 예외를 throw

 

  • queue.add(element) : element를 큐에 추가한다.
  • queue.remove() :front의 데이터를 제거한다.
  • queue.element(); front에 있는 데이터를 리턴한다. (데이터 제거 X)

 

package Array;

import java.util.LinkedList;
import java.util.Queue;

public class QueueTest3 {

    public static void main(String[] args) {

        Queue<Integer> queue = new LinkedList<>();
        //값을 넣지 않았는데 값을 삭제하면?
        queue.remove();
    }

}

 

콘솔에 출력된 결과값

 

 

 

 

 

Overflow(꽉 찬 상태) Underflow(빈 상태)에서 null 또는 false를 return

 

  • queue.offer(element) :  element를 큐에 추가한다.
  • queue.poll() : front의 데이터를 제거한다.
  • queue.peek() : front에 있는 데이터를 리턴한다. (데이터 제거 X)
  • queue.isEmpty() : 큐가 비어있으면 true, 비어있지 않으면 false 를 리턴한다.

 

 

package Array;

import java.util.LinkedList;
import java.util.Queue;

public class QueueTest3 {

    public static void main(String[] args) {
    

        Queue<Integer> queue = new LinkedList<>();
        queue.poll();
        
        System.out.println(queue.poll());
        
        
    }

}

 

콘솔에 출력된 결과값

 

 

마치며

 

 

메소드들을 직접 사용하면서 느낀건데 Collection framework의 자료구조들은 동적 할당을 전제로 하기 때문에 데이터의 추가 부분은 상대적으로 확인하기 어려웠다. 이것 외에는 알고리즘을 풀거나 비즈니스 로직을 구현할 때 차이점을 생각하면서 구현할 수 있을거같다.