본문 바로가기
개발 공부/자료구조

큐(Queue) Java로 구현하기

by 개발인생 2020. 2. 12.
반응형

큐(Queue) 구현하기

이번에는 앞서 설명한 Queue를 구현해보도록 하겠습니다.

구현에 앞서 필요한 기능들을 정리하자면

1. enqueue

큐에 데이터를 삽입합니다.

2. dequeue

큐의 맨 앞에 있는 데이터를 꺼내옵니다.
꺼내온 뒤에는 큐에서 제거합니다.

3. peek

큐의 맨 앞에 있는 데이터가 뭔지 확인합니다.

4. isEmpty

큐가 비어있는지 확인합니다.

구현하기

여기서는 Java의 List를 사용해 구현하도록 하겠습니다.

import java.util.ArrayList;

public class QuerePractice {

    public static void main(String[] args) {
        Queue queue = new Queue();

        // 데이터 넣기
        queue.enqueue(123);
        queue.enqueue("queue");

        // 데이터 빼면서 삭제하기
        queue.peek();   // 123
        System.out.println(queue.dequeue());    // "123"
        System.out.println(queue.dequeue());    // "queue"

        // 큐가 비어있는지 확인하기
        System.out.println(queue.isEmpty());    // true -> 비어있다

        // 비어 있는 큐에서 데이터를 가져오려고 할때
        System.out.println(queue.dequeue());
    }
}

// 큐 구현
class Queue {
    private ArrayList<Object> queue = new ArrayList<>();

    public void enqueue(Object param) {
        this.queue.add(param);
    }

    public Object dequeue() {
        if (this.queue.size() == 0) {
            System.out.println("Queue가 비어있습니다. ");
            return null;
        }
        Object data = this.queue.get(0);
        this.queue.remove(0);
        return data;
    }

    public void peek() {
        System.out.println(this.queue.get(0));
    }

    public Boolean isEmpty() {
        if (this.queue.size() == 0) {
          return true;
        }
        return false;
    }
}

차근차근 설명해보겠습니다.

1. queue

    private ArrayList<Object> queue = new ArrayList<>();

리스트로 큐를 구현하기 위해 Queue라는 클래스를 만들고
멤버변수로 ArrayList타입의 queue를 선언했습니다.

2. enqueue

    public void enqueue(Object param) {
        this.queue.add(param);
    }

파라미터로 전달받은 Data를 리스트에 추가해줍니다.
이렇게 list의 add() 메서드를 이용하면 데이터를 넣을때마다 차례대로 저장됩니다.

3. dequeue

    public Object dequeue() {
        if (this.queue.size() == 0) {
            System.out.println("Queue가 비어있습니다. ");
            return null;
        }
        Object data = this.queue.get(0);
        this.queue.remove(0);
        return data;
    }

리스트 맨 앞에 저장되어있는 데이터를 가져옵니다.

리스트가 비어있을 때 데이터를 가져오려고 하면 오류가 발생하니 오류가 발생하지 않게 데이터를 꺼내기전에 리스트가 비어있는지 확인해봅니다.

리스트가 비어있지 않으면 맨 앞의 데이터를 반환하고,
remove() 메서드를 사용해 리스트에서 삭제시켜줍니다.

4. isEmpty

    public Boolean isEmpty() {
        if (this.queue.size() == 0) {
          return true;
        }
        return false;
    }

리스트의 사이즈가 0이라면 리스트가 비어있다는 뜻이므로
true 를, 사이즈가 0이 아니라면 리스트에 데이터가 있다는 뜻이므로 false 를 반환해줍니다.

반응형

'개발 공부 > 자료구조' 카테고리의 다른 글

스택(Stack) 구현하기 - 자바(Java)  (0) 2020.02.19
스택(Stack)이란  (0) 2020.02.11
큐(Queue) 란  (0) 2020.02.10
리스트(List)  (0) 2020.02.07
배열이란  (0) 2020.01.20

댓글