큐 인터페이스
/**
* @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