Queue를 이용하여 하위 카테고리 구하기

Dabi·2022년 12월 1일
2

자료구조

목록 보기
1/1
post-thumbnail

회사에서 트리 구조로 이루어진 카테고리에 대하여 반복적으로 카테고리 목록을 탐색하면서 하위 모든 카테고리를 재귀적으로 구해야 할일이 생겼다.

트리 구조로 이루어진 챗봇의 카테고리 계층구조를 반복적으로 탐색하면서 특정 계층의 카테고리에 대하여 하위 모든 카테고리를 전부 조회하기 위해 큐 자료구조를 사용하여 해당 탐색구조를 구현하였다.

Queue는 사전적으로 무엇을 기다리는 사람이나 줄서서 기다리는것을 의미힌다. 이처럼 줄지어 순서 대로 처리되는 것이 바류 큐의 특징이다. 큐는 데이터를 일시적으로 쌓아두기 위한 자료구조로 스택과는 다르게 FIFO ( First In First Out)의 형태를 가진다.



  • Queue의 선언

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

Queue<Integer> queue1 = new LinkedList<>(); //int형 queue 선언, linkedlist 이용
Queue<String> queue2 = new LinkedList<>(); //String형 queue 선언, linkedlist 이용

java에서 Queue는 위와 같이 Linkedlist를 활용하여 생성한다.


  • Queue 값 추가

Queue<Integer> queue1 = new LinkedList<>(); 
queue1.add(1);     
queue1.offer(2);   

add와 offer 두가지 메서드 모두 queue에 값을 추가하는 방식이다.


offer의 경우 큐에 여유가 있어 값을 넣을 수 있다면 값을 넣고 True 를,
넣을 수 없다면 False 를 반환하며 특정 예외를 throw하지 않는다.


add의 경우 값을 넣을 수 없는 상황에서 illegalStateException을 발생시킨다.



  • Queue 값 삭제


Queue<Integer> queue2 = new LinkedList<>();
queue2.offer(1);
queue2.offer(2);
queue2.offer(3);
queue.poll();   // queue의 첫번째 값을 삭제하고 반환함. 비어있다면 null
queue.remove(); // queue의 첫번째 값을 제거
queue.clear();  // queue 초기화

위와 같이 queue의 값을 제거하는 방식은 poll과 remove가 존재한다.


remove의 경우 해당 값을 삭제한다.


poll의 경우 아래와 같이 해당 값을 삭제하면서 반환한다.


int whoIsPoll = queue2.poll();

만일 삭제하고 반환할 값이 존재하지 않는다면 null 을 반환한다.



  • 엿보기

자료구조의 상태를 건드리지 않고 queue에 첫번째로 저장되어 있는 값을 참조하고 싶다면 peek()을 사용할 수 있다.


Queue<Integer> queue3 = new LinkedList<>();
queue3.offer(1);
queue3.offer(2);
queue3.offer(3);
queue3.peek();  // 1을 참조.
profile
논리적인 사고와 추론을 지향합니다.

1개의 댓글

comment-user-thumbnail
2022년 12월 13일

나이스한 글입니다.

답글 달기