1 minute read

큐 인터페이스

/**
 * @author andpact
 * @param <E> the type of elements in this queue
 */
public interface QueueInterface<E> {
    /**
     * 요소를 삽입합니다.
     * @param e 삽입할 요소
     */
    void offer(E e);

    /**
     * 요소를 반환하고 제거합니다.
     * @return 반환할 요소
     */
    E poll();

    /**
     * 요소를 반환합니다.
     * @return 반환할 요소
     */
    E peek();

    /**
     * 모든 요소를 제거합니다.
     */
    void clear();

    /**
     * 큐가 비었는지 확인합니다.
     * @return 요소 포함 여부
     */
    boolean isEmpty();

    /**
     * 요소의 개수를 반환합니다.
     * @return 요소의 개수
     */
    int size();
}

생성자

public class Queue<E> implements QueueInterface<E>{
    private E[] arr;
    private final static int DEFAULT_CAPACITY = 10;
    private int size;

    public Queue() {
        arr = (E[]) new Object[DEFAULT_CAPACITY];
        size = 0;
    }
}

CREATE 메서드

@Override
public void offer(E e) {
    resize();
    arr[size] = e;
    size++;
}

READ 메서드

@Override
public E peek() {
    return arr[0];
}

@Override
public E poll() {
    E element = arr[0];
    for (int i = 0; i < size - 1; i++) {
        arr[i] = arr[i + 1];
    } arr[size - 1] = null;
    size--;
    resize();
    return element;
}

DELETE 메서드

@Override
public void clear() {
    arr = (E[]) new Object[DEFAULT_CAPACITY];
}

기타 메서드

@Override
public boolean isEmpty() {
    return size == 0;
}

@Override
public int size() {
    return size;
}

private void resize() {
    if (size == arr.length)
        arr = Arrays.copyOf(arr, arr.length * 2);
    else if (size < arr.length / 2)
        arr = Arrays.copyOf(arr, Math.max(DEFAULT_CAPACITY, arr.length / 2));
}

Leave a comment