Queue의 구조를 더욱 자세히 이해하기 위해 클래스를 직접 구현하고자 하였다.
때문에 직접 구현한 MakeLinkedList를 상속받아서 Queue을 구현하고자 한다.
Stack과 다르게 데이터가 들어간 순서대로 나오는 FIFO(First In Last Out) 선입선출 자료구조이다.
모든 메서드를 직접 구현하지 않고 주요 메서드 몇 개만 구현하였다.
class MakeQueue<E> {
private MakeLinkedList<E> queue; // 큐
// 생성자
public MakeQueue() {
queue = new MakeLinkedList<>();
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < queue.size(); i++) {
sb.append(queue.get(i));
if (i < queue.size() - 1) {
sb.append(", ");
}
}
sb.append("]");
return sb.toString();
}
// 값 추가(add)
public void add(E data) {
queue.addLast(data);
}
public E peek(){
return (E) queue.peek();
}
// 값 하나 삭제(poll)
public E poll() {
if (queue.isEmpty()){
System.out.println("데이터가 없습니다.");
return null;
}
return (E) queue.removeLast();
}
// 전체 삭제(clear)
public void clear() {
if (queue.isEmpty()) {
System.out.println("데이터가 없습니다.");
} else {
queue.clear();
}
}
}
class MakeQueue<E> {
private MakeLinkedList<E> queue; // 큐
// 생성자
public MakeQueue() {
queue = new MakeLinkedList<>();
}
// System.out.println 에서는 toString 이 돼 있어 정상출력 되지만
// 해당 클래스는 본인이 임의로 만든 것 이기 때문에 별도의 메소드를 만들어 toString화 해 준다.
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < queue.size(); i++) {
sb.append(queue.get(i));
if (i < queue.size() - 1) {
sb.append(", ");
}
}
sb.append("]");
return sb.toString();
}
// 값 추가(add)
public void add(E data) {
queue.addLast(data);
}
// 값 하나 조회(peek)
public E peek(){
return (E) queue.peek();
}
// 값 하나 삭제(poll)
public E poll() {
if (queue.isEmpty()){
System.out.println("데이터가 없습니다.");
return null;
}
return (E) queue.removeLast();
}
// 전체 삭제(clear)
public void clear() {
if (queue.isEmpty()) {
System.out.println("데이터가 없습니다.");
} else {
queue.clear();
}
}
}
public class MakeQueueMain {
public static void main(String[] args) {
MakeQueue<Object> queue = new MakeQueue<>();
queue.add("Hello");
queue.add("World");
queue.add("Hello");
queue.add("Hello");
queue.add("World");
System.out.println("add Test : " + queue);
// peek Test
System.out.println("peek Test : " + queue.peek());
// pop Test
System.out.println("poll Test : " + queue.poll());
System.out.println("poll Test : " + queue);
// clear Test
queue.clear();
System.out.println("clear Test : " + queue);
}
}
add Test : [Hello, World, Hello, Hello, World]
peek Test : Hello
poll Test : World
poll Test : [Hello, World, Hello, Hello]
clear Test : []