2018-6-8 Stack, Queue

Queue<E> 컬렉션프레임워크

  • 스택은 “가장 먼저 들어온 데이터가 가장 나중에 나가는 구조”를 말한다.

Queue인터페이스의 3가지 메소드

  1. boolean add(E e) 넣기
  2. E remove() 꺼내기
  3. 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>의 대표메소드

  • 앞으로 넣고, 꺼내고, 확인하기
    1. void addFirest(E e) : 넣기
    2. E removeFirst() : 꺼내기
    3. E getFirst() : 확인하기
  • 뒤로 넣고, 꺼내고, 확인하기
  • void addLast(E e) : 넣기
  • E removeLast() : 꺼내기
  • E getLast() : 확인하기

  • 위의 대표 메소드들은 예외를 발생시킨다. 밑의 메소드들은 예외가 아닌 특정 값을 반환한다.

  • 앞으로 넣고, 꺼내고, 확인하기
    1. boolean offerFirst(E e) : 넣기, 공간이 부족하면 false
    2. E pollFirst() : 꺼내기, 없으면 null
    3. E peekFirst() : 확인하기, 없으면 null

뒤로 넣고, 꺼내고, 확인하기

  1. boolean offerLast(E e) : 넣기, 공간이 부족하면 false
  2. E pollLast() : 꺼내기, 없으면 null
  3. 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