Java 파트13-2. LIFO와 FIFO 컬렉션
in Java
1. 시작하기 전에
컬렉션 프레임워크에는 LIFO(후입선출) 자료구조를 제공하는 Stack 클래스와 FIFO(선입선출) 자료구조를 제공하는 Queue 인터페이스가 있다.
2. Stack
Stack 클래스는 LIFO 자료구조를 구현한 클래스이다. 다음은 주요 메소드 이다.
리턴 타입 | 메소드 | 설명 |
---|---|---|
E | push(E item) | 주어진 객체를 스택에 넣는다 |
E | peek() | 스택 맨 위 객체를 가져오나, 객체를 스택에서 제거하지 않는다. |
E | pop() | 스택 맨 위 객체를 제거하고 가져온다. |
동전 케이스 예제를 만들어보자. 먼저 넣은 동전은 맨 밑으로 깔리고, 나중에 넣은 동전은 맨 위에 쌓이는 형식이다.
// 클래스
public class Coin {
private int value;
public int getValue() {
return value;
}
public Coin(int value){
this.value=value;
}
}
// 메인
public class StackExam {
public static void main(String[] args) {
Stack<Coin> stack = new Stack<>();
stack.push(new Coin(100));
stack.push(new Coin(90));
stack.push(new Coin(80));
while(!stack.isEmpty()){
Coin coin = stack.pop();
System.out.println(coin.getValue()); // 80 90 100
}
}
}
3. Queue
Queue 인터페이스는 FIFO자료구조에서 사용되는 메소드를 정의하고 있다. 인터페이스에 정의되어 있는 메소드는 다음과 같다. 리턴 타입|메소드|설명 —|—|— boolean|offer(E e)|주어진 객체를 넣는다 E|peek()|제거하지 않고 객체 하나를 가져온다. E|poll()|제거하고 객체 하나를 가져온다.
Queue 인터페이스를 구현한 대표적 클래스가 LinkedList인데 LinkedList는 List 인터페이스를 구현했기 때문에 List컬렉션이기도 하다. 사용은 간단하게 Queue 타입 인터페이스 변수에 LinkedList 객체를 대입하면 된다.
Stack 예제와 비슷하지만 동전을 넣은 순서대로 빼보자.
public class QueueExam {
public static void main(String[] args) {
Queue<Coin> queue = new LinkedList<>();
queue.offer(new Coin(100));
queue.offer(new Coin(90));
queue.offer(new Coin(80));
while(!queue.isEmpty()){
Coin coin = queue.poll();
System.out.println(coin.getValue()); // 100 90 80
}
}
}
4. 정리하기
- Stack : 후입선출을 구현한 클래스
- Queue : 선입선출에 필요한 메소드를 정의한 인터페이스로 대표적 구현 클래스는 LinkedList