리스트
- 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 로 사용할 수 있습니다.