2018-6-8 Stack, Queue
Queue<E> 컬렉션프레임워크
- 스택은 “가장 먼저 들어온 데이터가 가장 나중에 나가는 구조”를 말한다.
Queue인터페이스의 3가지 메소드
- boolean add(E e) 넣기
- E remove() 꺼내기
- E element() 확인.
- boolean offer(E e) : 넣기, 넣을 공간이 부족하면 false
- E poll() : 꺼내기, 꺼낼 대상이 없으면 null반환
- E peek() : 확인하기, 확인할 대상이 없으면 null반환
package yoon;
import java.util.LinkedList;
import java.util.Queue;
public class LinkedListQueue {
public static void main(String[] args) {
Queue<String> que = new LinkedList<>();
que.offer("Box");
que.offer("Toy");
que.offer("Robot");
System.out.println("next : " + que.peek());
//첫번째, 두번째 인스턴스 꺼내기
System.out.println(que.poll());
System.out.println(que.poll());
// 무엇이 다음에 나올지 확인
System.out.println("next : " + que.peek());
System.out.println(que.poll());
}
}
//result
next : Box
Box
Toy
next : Robot
Robot
스택의구현
- public class Stack<E> extends Vector<E>
-
public interface Deque<E> extends Queue<E>
- 덱은 큐와 외형구조가 유사하다. 그러나 한쪽 방향으로만 넣고 꺼내는 큐와 달리 덱은 양쪽 끝에서 넣고 빼는 것이 가능하다.
Dequq<E>의 대표메소드
- 앞으로 넣고, 꺼내고, 확인하기
- void addFirest(E e) : 넣기
- E removeFirst() : 꺼내기
- E getFirst() : 확인하기
- 뒤로 넣고, 꺼내고, 확인하기
- void addLast(E e) : 넣기
- E removeLast() : 꺼내기
-
E getLast() : 확인하기
-
위의 대표 메소드들은 예외를 발생시킨다. 밑의 메소드들은 예외가 아닌 특정 값을 반환한다.
- 앞으로 넣고, 꺼내고, 확인하기
- boolean offerFirst(E e) : 넣기, 공간이 부족하면 false
- E pollFirst() : 꺼내기, 없으면 null
- E peekFirst() : 확인하기, 없으면 null
뒤로 넣고, 꺼내고, 확인하기
- boolean offerLast(E e) : 넣기, 공간이 부족하면 false
- E pollLast() : 꺼내기, 없으면 null
- E peekLast() : 확인하기, 없으면 null
package yoon;
import java.util.ArrayDeque;
import java.util.Deque;
public class ArrayDequqCollection {
public static void main(String[] args) {
Deque<String> deq = new ArrayDeque<>();
// 앞으로넣고
deq.offerFirst("1.Box");
deq.offerFirst("2.Toy");
deq.offerFirst("3.Robot");
// 앞에서 꺼내기
System.out.println(deq.poll());
System.out.println(deq.poll());
System.out.println(deq.poll());
}
}
//result
3.Robot
2.Toy
1.Box
- Deque<String> deq = new ArrayDeque<>() -> 배열을 기반으로 하는 덱의 구성
- Deque<String> deq = new LinkedList<>() -> 리스트를 기반으로 하는 덱의 구성
LinkedList가 Dequq<E>, List<E>, Queue<E> 인터페이스를 모두 구현하기때문에 가능하다.
package yoon;
import java.util.ArrayDeque;
import java.util.Deque;
interface DIStack<E> {
public boolean push(E item);
public E pop();
}
class DCStack<E> implements DIStack<E> {
private Deque<E> deq;
public DCStack(Deque<E> d) {
deq = d;
}
public boolean push(E item) {
return deq.offerFirst(item);
}
public E pop() {
return deq.pollFirst();
}
}
public class DefineStack {
public static void main(String[] args) {
DIStack<String> stk = new DCStack<>(new ArrayDeque<String>());
// PUSH연산
stk.push("1.BOX");
stk.push("2.Robot");
stk.push("3.Toy");
//pop연산
System.out.println(stk.pop());
System.out.println(stk.pop());
System.out.println(stk.pop());
}
}
//result
3.Toy
2.Robot
1.BOX
Written on June 8, 2018