스택
- LIFO구조. 마지막에 저장된 것을 제일 먼저 꺼내게 된다.
- 밑이 막힌 상자.
- 넣는걸 쌓고 쌓인게 부터 꺼냄
-큐
- FIFO구조. 제일 먼저 저장한 것을 제일 먼저 꺼내게 된다.
- 양 끝이 뚫린 상자
- 줄서기 구조, 줄을 먼저 선 사람부터 업무를 본다.
사실 나는 Stack과 Queue를 여러번 공부했지만, 나중가면 둘이 굉장히 헷갈렸다.
나는 게임 '리그오브레전드'를 인용하여 이를 공부하였다.
- 야 큐 돌려 할 때쓰는 큐이다. (게임 매칭 시스템)
- 큐 돌리면 대게 먼저 돌리는 사람이 먼저 게임이 잡히게 된다.
나는 Stack을 롤(LoL)에서 코르키 스택이라고 부른다.
왼쪽에서부터 채워지고(push) 오른쪽에서부터 사용(pop)한다. (LIFO구조)
스택의 메소드
메소드 | 설명 |
boolean empty() | Stack이 비어있는지 알려준다. |
Object peek() | Stack의 맨 위에 저장된 객체를 반환. |
Object pop() | Stack의 맨위에 저장된 객체를 꺼냄 |
Object push(Object item) | Stack에 객체(item)을 저장한다. |
int serch(Object o) | Stack에 주어진 객체를 찾아서 그 위치를 반환, 못찾으면 -1반환 (배열과 달리 위치는 1부터 시작) |
큐의 메소드
메소드 | 설명 |
boolean add | 저장된 객체를 Queue에 추가. 성공하면 true 저장공간이 부족하면 lliegalStateException 발생 |
Object remove | Queue에서 객체를 꺼내 반환 비어있으면 NoSuchElementException발생 |
Object element() | 삭제없이 요소를 읽어온다. peek과 달리 Queue가 비었을 때 NoSuchElementException발생 |
boolean Offer(Object o) | Queue에 객체를 저장. 성공하면 true, 실패하면 talse를 반환 |
Object poll() | Queue에서 객체를 꺼내서 반환. 비어있으면 null 반환(remove와 달리 예외발생x) |
Object peek() | 삭제없이 요소를 읽어 온다. Queue가 비어있으면 null 반환 |
add / remove 와 offer / poll
이들은 추가, 삭제하는 기능을 한다.
하지만 add / remove는 예외를 발생해서 try / catch 구문을 작성해야 하고,
offer / poll 은 예외를 발생하지 않아서, 대게는 이것을 사용한다.
Stack은 클래스를 가지고 있고, Queue는 인터페이스이다.
따라서 Stack은 객체 생성 (Stack st = new Stack)이 가능하고, Queue는 불가능하다.
Queue 객체를 사용하는 방법?
Queue를 구현한 클래스를 사용하면 된다.
그 중 LinkedList가 Queue인터페이스를 구현한 것이다.
Queue q = new LinkedList();로 사용이 가능하다.
Stack & Queue 예제
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class StackQueueTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack st = new Stack();
Queue q = new LinkedList();
st.push("0");
st.push("1");
st.push("2");
q.offer("0");
q.offer("1");
q.offer("2");
System.out.println("= Stack =");
while(!st.empty()) {
System.out.println(st.pop()); // 스택에서 요소 하나 꺼냄
}
System.out.println("= Queue =");
while(!q.isEmpty()) {
System.out.println(q.poll()); // 큐에서 요소 하나 꺼냄
}
}
}
[출력]
= Stack =
2
1
0
= Queue =
0
1
2
스택은 나중에 넣은 것 부터 출력이 된다.
큐는 먼저 넣은 것 부터 출력이 된다.
'Java' 카테고리의 다른 글
자바 컬렉션프레임워크 LinkedList의 특징 (0) | 2022.01.15 |
---|---|
자바 스트림(Stream)과 파일 입출력(File I/O) - java.io.File (0) | 2022.01.13 |
자바 컬렉션프레임워크 HashMap, HashTable 순서, 중복 알아보기 (0) | 2022.01.12 |
자바 컬렉션 프레임워크(List, Set, Map) (0) | 2022.01.10 |
자바 Scanner 대신 bufferedReader를 사용하는 이유 ( BufferedWriter, StringTokenizer 사용법) (0) | 2022.01.10 |
댓글