Stack

  • LIFO, ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋„ฃ์€ ์š”์†Œ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ œ๊ฑฐ๋จ
  • ์ฃผ์š” ๋ฉ”์„œ๋“œ
    • push(E item) : ์š”์†Œ ์‚ฝ์ž…
    • pop() : ์š”์†Œ ์ œ๊ฑฐ ๋ฐ ๋ฐ˜ํ™˜
    • peek() : ์ตœ์ƒ๋‹จ ์š”์†Œ ํ™•์ธ (์ œ๊ฑฐ x)
    • isEmpty() : ์Šคํƒ์ด ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ
  • ๊ตฌํ˜„ ๋ฐฉ๋ฒ•
    • Stack<E> ํด๋ž˜์Šค ์‚ฌ์šฉ
    • LinkedList / ArrayDeque
import java.util.Stack;
 
public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        
        stack.push(1);
        stack.push(2);
        stack.push(3);
        
        System.out.println(stack.pop());  // 3
        System.out.println(stack.peek()); // 2
        System.out.println(stack.isEmpty()); // false
    }
}

Queue

  • FIFO, ๋จผ์ € ๋„ฃ์€ ์š”์†Œ๊ฐ€ ๋จผ์ € ์ œ๊ฑฐ๋จ
  • ์ฃผ์š” ๋ฉ”์„œ๋“œ
    • offer(E item) : ์š”์†Œ ์‚ฝ์ž…
    • poll() : ์š”์†Œ ์ œ๊ฑฐ ๋ฐ ๋ฐ˜ํ™˜
    • peek() : ์ฒซ๋ฒˆ์งธ ์š”์†Œ ํ™•์ธ(์ œ๊ฑฐ x)
    • isEmpty : ํ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ
  • ๊ตฌํ˜„ ๋ฐฉ๋ฒ•
    • Queue<E> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ LinkedList / ArrayDeque
import java.util.Queue;
import java.util.LinkedList;
 
public class QueueExample {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        
        System.out.println(queue.poll()); // 1
        System.out.println(queue.peek()); // 2
        System.out.println(queue.isEmpty()); // false
    }
}

Deque (Double-Ended Queue)

  • ์–‘์ชฝ ๋์—์„œ ์‚ฝ์ž…/์‚ญ์ œ ๊ฐ€๋Šฅ
  • ์ฃผ์š” ๋ฉ”์„œ๋“œ
    • addFirst(E e), addLast(E e) : ์•ž/๋’ค์— ์š”์†Œ ์ถ”๊ฐ€
    • removeFirst() , removeLast() : ์•ž/๋’ค์— ์š”์†Œ ์ œ๊ฑฐ
    • getFirst(), getLast() : ์•ž/๋’ค ์š”์†Œ ํ™•์ธ(์ œ๊ฑฐ x)
  • ๊ตฌํ˜„ ๋ฐฉ๋ฒ•
    • Deque ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ArrayDeque ๋˜๋Š” LinkedList ์‚ฌ์šฉ
import java.util.Deque;
import java.util.ArrayDeque;
 
public class DequeExample {
    public static void main(String[] args) {
        Deque<Integer> deque = new ArrayDeque<>();
        
        deque.addFirst(1);
        deque.addLast(2);
        deque.addLast(3);
        
        System.out.println(deque.removeFirst()); // 1
        System.out.println(deque.removeLast());  // 3
        System.out.println(deque.getFirst());    // 2
    }
}