Array, Queue, ArrayDeque

Stack

Stack<Integer> stack = new Stack<>();
stack.push(10);
stack.push(20);
System.out.println(stack.peek());
System.out.println(stack.pop());
  • Stack에서 넣는 값은 push()

  • Stack에서 빼서 보는 것은 peek()

  • Stack에서 빼는 것은 pop()

  • FILO

Queue

Queue<Integer> queue = new Queue<>();
queue.add(10);
queue.add(20);
System.out.println(queue.peek());
System.out.println(queue.poll()); // queue는 poll로 빼낸다. FIFO
  • Stack에서 넣는 값은 add()

  • Stack에서 빼서 보는 것은 peek()

  • Stack에서 빼는 것은 poll()

  • FIFO

contains, remove 등 O(N) API 사용 주의

for (int i = 0; i < MAX; i++){
    if (stack.contains(MAX)) {
    }
}
for (int i = 0; i < MAX; i++){
    if (queue.remove(MAX)) {
    }
}
  • contains(), remove() 할 때마다 완전탐색

  • Stack, Queue, ArraydEque, ArrayList 등의 자료구조에서 contains(), remove() 가급적 사용 X

  • MAX = 100000 일 때

    • Stack: 7.016초

    • Queue: 8.48초

  • HashMap의 containsKey는 일반적으로 O(1) 이라 괜찮다.

    • MAX = 100000 일 때: 0.011초

ArrayDeque as Stack

ArrayDeque<Integer> arrayDequeStack = new ArrayDeque<>();
arrayDequeStack.addLast(10);
arrayDequeStack.addLast(20);
System.out.println(arrayDequeStack.peekLast());
System.out.println(arrayDequeStack.pollLast());
  • Stack 이 ArrayDeque보다 미세하게 빠르다 (SingleThread에서)

ArrayDeque as Queue

ArrayDeque<Integer> arrayDequeQueue = new ArrayDeque<>();
arrayDequeQueue.addLast(10);
arrayDequeQueue.addLast(20);
System.out.println(arrayDequeQueue.peekFirst());
System.out.println(arrayDequeQueue.pollFirst());

Last updated