개발 관련 부가 지식/자바, 스프링
Java Queue 구현
Developer-Choi
2023. 2. 22. 20:40
728x90
728x90
Queue은? FIFO(Firs-In First-Out) 형태의 자료 구조 ✔
Queue 자료 구조 java로 구현해 보았다.
-> MyNode라는 객체를 가지고 로직 구현을 함, MyNode는 입력데이터와 다음 MyNode의 주소 값을 가지고 있음
-> MyNode를 MyQueue 안에 정의하는 이유는 MyNode 의 private 필드를 접근하기 위함 ✔
Queue의 메소드 👀
->add() : 맨 끝에다 데이터 추가
->remove() : 맨 앞 데이터 꺼냄
->peek() : 맨 앞 데이터 보는 것
->isEmtpy() : Queue가 비었는지 확인
public class MyQueue<T> {
class MyNode<T> {
private T data;
private MyNode<T> next;
public MyNode(T data) {
this.data = data;
}
}
//-------------> Queue는 FIFO 구조로 first, last 둘 다 관리
private MyNode<T> first;
private MyNode<T> last;
//-------------> add를 할때마다 last의 node를 바꿔줘야함
//-------------> Queue가 빈 상태에서 처음 데이터 add시에는 first와 last가 같음!!
public void add(T item) {
MyNode<T> t = new MyNode<T>(item);
if(last != null) {
last.next = t;
}
last = t;
if(first == null) {
first=last;
}
}
//-------------> remove는 현재 first의 data 값을 리턴해줘야 하고, 리턴 전에 first를 next의 node로 바꿔줘야함
//-------------> first.next가 null 일 시에는 last도 null로 바꿔줌
public T remove() {
if (first == null) {
throw new NullPointerException();
}
T data = first.data;
first = first.next;
if (first == null) {
last == null;
}
return data;
}
//-------------> peek은 현재 first의 data 값만 출력
public T peek() {
if (first == null) {
throw new NullPointerException();
}
return first.data;
}
//-------------> first 비었는지만 출력
public boolean isEmpty() {
return first == null;
}
}
class Test {
public static void main(String[] args) {
MyQueue<Integer> queue = new MyQueue<Integer>();
queue.add(1);
queue.add(2);
queue.add(3);
System.out.println(queue.remove());
System.out.println(queue.remove());
System.out.println(queue.peek());
System.out.println(queue.remove());
System.out.println(queue.isEmpty());
/* 출력 값
1
2
3
3
true
* */
}
}
(디버깅을 하면서 코드를 보시면 훨씬 이해하기 쉬워요) ✔
👏
👏