1. 스택(Stack)이란?
- 마지막에 저장한 데이터를 가장 먼저 꺼내는 자료구조로 입니다.
- LIFO(Last In First Out)
- 예 - 웹브라우저의 앞페이지 이동 뒤페이지 이동 / 그릇 쌓기
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(3);
stack.push(7);
stack.push(5);
System.out.println(stack); // [1, 3, 7, 5]
System.out.println(stack.peek()); // 5 peek은 맨위에 뭐가 있는지 확인만 함
System.out.println(stack.pop()); // 5 pop은 꺼내옴
System.out.println(stack.contains(1));
System.out.println(stack.empty()); // false //스택이 비어있으면 true, 데이터가 있으면 false
stack.clear();
System.out.println(stack.empty()); // true
}
}
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
2. 큐(Queue)
- 큐는 처음에 저장한 데이터를 가장 먼저 꺼내는 자료구조입니다
- FIFO(First In First Out)
- 예 - 은행 창구 줄서기 / 인쇄작업 대기목록
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(5);
queue.add(3);
System.out.println(queue); // [1, 5, 3]
System.out.println(queue.poll()); // 1 // 맨앞의 데이터를 꺼낸다
System.out.println(queue.peek()); // 5 // 맨앞의 데이터가 뭔지 확인만 함.
}
}
3. ArrayDeque
- 실무에서는 단순히 Stack, Queue 클래스 대신에 ArrayDeque 많이 사용합니다!
- 기본 Stack, Queue의 기능을 모두 포함하면서도 성능이 더 좋기 때문이죠.
import java.util.ArrayDeque;
public class Main {
public static void main(String[] args) {
ArrayDeque<Integer> arrayDeque = new ArrayDeque<>();
arrayDeque.addFirst(1);
arrayDeque.addFirst(2);
arrayDeque.addFirst(3);
arrayDeque.addFirst(4);
System.out.println(arrayDeque); // [4, 3, 2, 1]
arrayDeque.addLast(0);
System.out.println(arrayDeque); // [4, 3, 2, 1, 0]
arrayDeque.offerFirst(10); //addFirst와 비슷하지만 큐의 크기 문제가 생길 때, offerFirst는 false를 addFrist는 exception을 반환합니다.
System.out.println(arrayDeque); // [10, 4, 3, 2, 1, 0]
arrayDeque.offerLast(-1);
System.out.println(arrayDeque); // [10, 4, 3, 2, 1, 0, -1]
arrayDeque.push(22);
System.out.println(arrayDeque); // [22, 10, 4, 3, 2, 1, 0, -1]
System.out.println(arrayDeque.pop()); //22
System.out.println(arrayDeque); // [10, 4, 3, 2, 1, 0, -1]
System.out.println(arrayDeque.removeFirst()); // 첫번째 값을 제거하면서 그 값을 리턴
System.out.println(arrayDeque.removeLast()); // 마지막 값을 제거하면서 그 값을 리턴
System.out.println("romove와 poll이 차이가 있나? 출력 데이터는 동일");
System.out.println(arrayDeque.pollFirst()); // 첫번째 값을 반환 및 제거하면서 그 값을 리턴
System.out.println(arrayDeque.pollLast()); // 마지막 값을 반환 및 제거하면서 그 값을 리턴
System.out.println(arrayDeque.peekFirst()); // 첫번째 값을 반환, 제거하지 않음
System.out.println(arrayDeque.peekLast()); // 마지막 값을 반환, 제거하지 않음
arrayDeque.clear();
System.out.println(arrayDeque.isEmpty()); // true
}
}
'프로그래밍 > Java' 카테고리의 다른 글
람다(Lambda)란? (0) | 2022.05.18 |
---|---|
제네릭스(Generics) 란? (0) | 2022.05.18 |
Collection(1) (List, Set, Map) (0) | 2022.05.18 |
날짜, 시간 (0) | 2022.05.18 |
예외, 에러 처리 (0) | 2022.05.18 |