ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자료구조] Queue란? from java
    자료구조 2024. 4. 27. 00:40

    Queue 란?  

    • Queue란? 사전적 의미로는 대기줄이다
    • 이러한 사전 적 의미 처럼 queue는 차례대로 처리된다
    • 큐는 후입선출(LIFO)인 스택과 다르게 선입선출(FIFO)의 형태를 가진다
    • 선입선출 말 그대로 먼저 들어오면 먼저 나가는 구조이다

    Queue

     

    특징


    - FIFO (First In First Out) 구조 
    - 큐의 한 쪽 끝은 front (앞)로 정하여 삭제 연산만 수행
    - 다른 한 쪽 끝은 rear 로 정하여 삽입 연산만 수행
    - 예를 들어 빨대 형태이다 한쪽으로 들어오고 다른 한쪽으로 나간다

     

     

    사용법, 예제

    import java.util.Queue;
    import java.util.LinkedList;
    Queue<T> queue = new LinkedList<>(); // T 타입 queue 선언


    - 일단 java.util.Queue 클래스로부터 제공 받는다

     

     

    값 추가 add(), offer()


    Queue<Integer> queue = new LinkedList<>(); // int형 queue 선언
    
    queue.offer(3);
    queue.offer(5);
    queue.add(1);
    queue.add(4);
    
    System.out.println(queue); // 출력 결과 : [3, 5, 1, 4]

     

    - 위 코드 처럼 add(), offer() 메서드를 이용해서 queue에 값을 추가 할 수 있다
    - 그렇다면 이 두 메서드의 차이점은 뭘까
    - 이 add, offer 메서드는 둘다 queue에 값을 추가하는 기능을 가지는건 똑같다 
    - 하지만 쉽게 말해 만약 큐의 용량이 초과 되었을때 add() 는 예외를 발생시키고 offer()는 false를 반환한다

    Queue 클래스 java docs add(), offer()

     

    - 위 사진 처럼 둘다 반환 값은 boolean 형태이다
    - 하지만 위의 설명 처럼 add()는 if the element cannot be added at this time due to capacity restrictions (용량 제한으로 인해 현재 요소를 추가할 수 없는 경우)로 IllegalStateException를 던진다

     

     

    값 삭제 poll(), remove()


    Queue<Integer> queue = new LinkedList<>(); // int형 queue 선언
    
    queue.offer(3);
    queue.offer(5);
    queue.offer(1);
    queue.offer(4);
    
    queue.poll();
    System.out.println(queue); // 출력 결과 : [5, 1, 4]
    
    queue.remove();
    System.out.println(queue); // 출력 결과 : [1, 4]


    - Queue의 값을 삭제 하기 위해서는 poll(), remove() 메서드를 사용한다 
    - 앞서 말한 것 처럼 Queue는 FIFO(선입선출) 형태를 가지고 있으므로 가장 처음에 넣었던 값이 삭제된다

    - 여기서도 remove()와 poll()은 데이터를 삭제하는 역할을 하는건 같지만 차이점이 있다

    Queue 클래스 java docs remove(), poll()

     

    - 위 사진 처럼 poll()은 queue의 데이터를 삭제를 하고 그 데이터를 반환한다 
    - poll()은 값이 없으면 Null를 반환한다
    - remove()도 삭제하고 그 데이터를 반환을 하지만 queue에 삭제할 데이터가 없으면 NosuchElementException를 던진다

     

     

    제일 앞에 있는 값 조회 peek(), element()


    Queue<Integer> q = new LinkedList<>(); // int형 queue 선언
    
    q.offer(3);
    q.offer(5);
    q.offer(1);
    q.offer(4);
    
    System.out.println(q.peek()); // 출력 결과 : 3
    System.out.println(q.element()); // 출력 결과 : 3


    - Queue의 가장 앞에 있는 값이 조회하기 위해서는 peek(), element() 메서드를 사용한다
    - 이 메서드들은 그저 조회만 한다

    - 여기서도 peek() 와 element의 차이점이 있다

    Queue 클래스 java docs element(), peek()

     

    - 위 사진 처럼 peek()는 앞에 있는 값을 반환한다
    - 만약 값이 없을때는 null를 반환한다
    - 하지만 element()는 값이 없을때는 NoSuchElementException를 던진다

     

Designed by Tistory.