-
[자료구조] 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를 던진다'자료구조' 카테고리의 다른 글
[자료구조] 신장 트리 (0) 2024.08.31 [자료구조] 그래프(Graph) (0) 2024.06.10 [자료구조] 힙(Heap) 이란 뭘까? (0) 2024.05.09 [자료구조] Queue의 구현체 (우선순위 큐) (0) 2024.04.28 [자료구조] Deque란? from Java (1) 2024.04.27