리스트
- ArrayList
- LinkedList
- Vector
- Stack
Stack
은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 LIFO(Last In First Out) 구조로 되어 있습니다.Stack
은 순차적으로 데이터를 추가하고 삭제하므로 ArrayList
와 같은 배열 기반의 컬렉션 클래스가 적합합니다.import java.util.Stack; class Main { public static void main(String[] args) { Stack stack = new Stack<>(); stack.push(1); stack.push(2); stack.push(3); while (!stack.empty()) { System.out.println(stack.pop()); } } } // 실행 결과 3 2 1
pop()
과 달리 Stack에서 객체를 꺼내지는 않습니다.EmptyStackException
이 발생합니다.EmptyStackException
이 발생합니다.-1
을 반환합니다.Queue
는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out) 구조로 되어 있습니다.Queue
는 데이터를 꺼낼 때 항상 첫 번째 저장된 데이터를 삭제하므로, 데이터의 추가/삭제가 쉬운 LinkedList
로 구현하는 것이 적합합니다.import java.util.LinkedList; import java.util.Queue; class Main { public static void main(String[] args) { Queue queue = new LinkedList(); queue.offer(1); queue.offer(2); queue.offer(3); while (!queue.isEmpty()) { System.out.println(queue.poll()); } } } // 실행 결과 1 2 3
true
를 반환합니다.IllegalStateException
이 발생합니다.NoSuchElementException
이 발생합니다.peek()
와 달리 Queue가 비어있으면 NoSuchElementException
이 발생합니다.true
, 실패하면 false
를 반환합니다.null
을 반환합니다.null
을 반환합니다.null
을 저장할 수 없으며, null
을 저장하면 NullPointerException
이 발생합니다.PriorityQueue
는 저장공간으로 배열을 사요ㅕㅇ하며, 각 요소를 힙(Heap) 자료구조 형태로 저장합니다.PriorityQueue
가 내부적으로 가지고 있는 배열은 저장한 순서와 다르게 저장됩니다. (이는 자료구조 Heap의 형태로 저장되어서)===== 오름차순 정렬 =====
import java.util.PriorityQueue; import java.util.Queue; class Main { public static void main(String[] args) { PriorityQueue<Integer> pq = new PriorityQueue<>(); pq.offer(3); pq.offer(2); pq.offer(1); pq.offer(5); pq.offer(4); System.out.println("PriorityQueue: " + pq); // --- 1️⃣ while (!pq.isEmpty()) { System.out.println(pq.poll()); } } } // 실행 결과 PriorityQueue: [1, 3, 2, 5, 4] 1 2 3 4 5
===== 반대로 정렬 =====
import java.util.Collections; import java.util.PriorityQueue; class Main { public static void main(String[] args) { PriorityQueue<Integer> rpq = new PriorityQueue<>(Collections.reverseOrder()); rpq.offer(4); rpq.offer(6); rpq.offer(5); rpq.offer(1); System.out.println("ReversePriorityQueue: " + rpq); while (!rpq.isEmpty()) { System.out.println(rpq.poll()); } } } // 실행 결과 ReversePriorityQueue: [6, 4, 5, 1] 6 5 4 1
Queue
와 달리 양쪽 끝에서 추가/삭제가 가능합니다.Deque
은 Stack
과 Queue
를 하나로 합쳐 놓은 것과 같으며, Stack
으로 사용할 수 있고 Queue
로 사용할 수 있습니다.