ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Stack, Queue (Priority Queue와 deque 포함)
    JAVA/컬렉션 프레임워크 2023. 8. 3. 15:16

    스택은 마지막에 저장한 데이터를 가장 먼저 꺼낼 수 있는 LIFO 방식이다.

    LIFO (Last In First Out)

     

    큐는 처음에 저장한 데이터를 가장 먼저 꺼내는 FIFO 방식이다.

    FIFO (First In First Out)

     

    사진 : Java의 정석 (남궁성 지음)

     

    예를 들어 데이터 0, 1, 2를 넣었다면 스택으로 꺼낼 때에는 2, 1, 0 순으로 꺼내게 되고 큐로 꺼낼 때에는 0, 1, 2 순서로 꺼내게 된다.

     

     

    Stack과 Queue의 데이터 저장, 뽑기 예제

    public class Main {
        public static void main(String[] args) {
            Stack st = new Stack();
            Queue q = new LinkedList();
    
            st.push("0");
            st.push("1");
            st.push("2");
    
            q.offer("0");
            q.offer("1");
            q.offer("2");
    
            System.out.println("Stack");
            while(!st.empty()) {
                System.out.println(st.pop());
            }
    
            System.out.println("Queue");
            while(!q.isEmpty()) {
                System.out.println(q.poll());
            }
        }
    }

    Stack과 Queue 데이터 꺼내기

     

     

    Stack, Queue의 실사용

    Stack은 대표적으로 웹 브라우저의 뒤로/앞으로 가기 버튼에 사용된다.

    Queue는 대표적으로 최근 사용문서 기록에 사용된다.

     

    네이버 -> 구글 -> 다음 순으로 접근했다가 뒤로가기를 누르면 구글로 접근하게 된다. 이러한 방식은 Stack을 사용한 대표적인 활용 예시라고 볼 수 있다.

     

     

     

    PriorityQue

    Queue의 인터페이스의 구현체 중 하나인데 저장한 순서에 따라 출력되는 것이 아니라 우선순위가 따로 있고, 그 우선순위에 따라서 데이터를 찾아오는 자료구조이다.

    public class Main {
        public static void main(String[] args) {
            Queue pq = new PriorityQueue();
            pq.offer(3);
            pq.offer(1);
            pq.offer(5);
            pq.offer(2);
            pq.offer(4);
            System.out.println(pq);
    
            Object obj = null;
    
            while((obj = pq.poll()) != null) {
                System.out.println(obj);
            }
        }
    }

    우선순위는 숫자가 작을 수록 우선순위가 높기 때문에 1, 2, 3, 4, 5 순으로 하나씩 출력된 것을 확인할 수 있다.

    숫자 뿐 아니라 객체를 저장할 수도 있는데 이럴 경우에는 크기를 비교할 수 있는 방법을 제공해야만 한다.

     

     

     

    Deque

    Queue의 변형으로 양 쪽에 추가/삭제가 가능하여 stack과 que를 하나로 합쳐놓은 것과 같다.

    Deque의 조상은 Queue이며, ArrayList와 LinkedList로 구현한다.

    사진 : Java의 정석 (남궁성 지음)

     

    사진 : Java의 정석 (남궁성 지음)

     

    'JAVA > 컬렉션 프레임워크' 카테고리의 다른 글

    HashMap  (0) 2023.08.04
    TreeSet  (0) 2023.08.03
    HashSet  (0) 2023.08.03
    ArrayList와 LinkedList  (0) 2023.08.03
Designed by Tistory.