<스택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);
System.out.println(stack.peek());
System.out.println("size: "+stack.size());
System.out.println(stack.pop());
System.out.println("size: "+stack.size());
}
}
=>[1, 3, 7, 5]
5
size: 4
5
size: 3
.peek()은 제일 위에 뭔지 보기만 할게
.pop()은 제일 위에꺼 꺼내서 뭔지 볼게
System.out.println(stack.contains(1));
System.out.println(stack.empty());
stack.clear();
System.out.println(stack.isEmpty());
=>true
false
true
<큐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(3);
queue.add(5);//Queue에 값 삽입합니다.
System.out.println(queue);//Queue 출력합니다.
System.out.println(queue.poll()); // Queue에서 객체를 꺼내서 반환합니다.
queue.add(7);
queue.add(11);
queue.add(9);
System.out.println(queue);
System.out.println(queue.peek()); //Queue에서 삭제 없이 요소를 반환합니다.
System.out.println(queue);
}
}
=>[1, 3, 5]
1
[3, 5, 7, 11, 9]
3
[3, 5, 7, 11, 9]
.poll은 스택에서 .pop과 같이 꺼내서 보는 것.
<ArrayDeque>
실무에서는 ArrayDeque를 많이 씀.
왜냐 기본스택이나 큐의 기능을 다 포함(pop, push, pull)하면서도 성능이 더 좋아서 사용
한쪽에서만 꺼내는 게 아니라 양쪽으로 다 꺼내고 넣을 수 있음.
import java.util.ArrayDeque;
public class Main {
public static void main(String[] args) {
ArrayDeque<Integer> arrayDeque = new ArrayDeque<>(); // ArrayDeque를 이용한 선언(제네릭스 이용)
arrayDeque.addFirst(1);
arrayDeque.addFirst(2);
arrayDeque.addFirst(3);
arrayDeque.addFirst(4); // arrayDeque의 앞에 값을 삽입
System.out.println(arrayDeque);
arrayDeque.addLast(0); // arrayDeque의 끝에 값을 삽입
System.out.println(arrayDeque);
arrayDeque.offerFirst(10); // addFirst와 비슷하지만 큐의 크기 문제가 생길 때, offerFirst는 false를,
// addFrist는 exception을 반환합니다.
System.out.println(arrayDeque);
arrayDeque.offerLast(-1); // arrayDeque의 끝에 값을 삽입
System.out.println(arrayDeque);
System.out.println(arrayDeque.size()); // 7
arrayDeque.push(22); // Stack에 있던 기능
System.out.println(arrayDeque);
System.out.println(arrayDeque.pop());
System.out.println(arrayDeque);
System.out.println(arrayDeque.peek());
System.out.println(arrayDeque);
System.out.println(arrayDeque.size());
// arrayDeque.clear();
// System.out.println(arrayDeque.isEmpty());
System.out.println(arrayDeque.removeFirst()); // 첫번째 값을 제거하면서 그 값을 리턴
System.out.println(arrayDeque.removeLast()); // 마지막 값을 제거하면서 그 값을 리턴
System.out.println(arrayDeque);
System.out.println(arrayDeque.size()); // 5
System.out.println(arrayDeque.pollFirst()); // 첫번째 값을 반환 및 제거하면서 그 값을 리턴
System.out.println(arrayDeque);
System.out.println(arrayDeque.size()); // 4
System.out.println(arrayDeque.pollLast()); // 마지막 값을 반환 및 제거하면서 그 값을 리턴
System.out.println(arrayDeque);
System.out.println(arrayDeque.size()); // 3
System.out.println(arrayDeque.peekFirst()); // 첫번째 값을 반환, 제거하지 않음
System.out.println(arrayDeque.peekLast()); // 마지막 값을 반환, 제거하지 않음
System.out.println(arrayDeque.size()); // 3
}
}
=>[4, 3, 2, 1]
[4, 3, 2, 1, 0]
[10, 4, 3, 2, 1, 0]
[10, 4, 3, 2, 1, 0, -1]
7
[22, 10, 4, 3, 2, 1, 0, -1]
22
[10, 4, 3, 2, 1, 0, -1]
10
[10, 4, 3, 2, 1, 0, -1]
7
10
-1
[4, 3, 2, 1, 0]
5
4
[3, 2, 1, 0]
4
0
[3, 2, 1]
3
3
1
3
계속 앞에 넣으니까 넣은 순서랑 반대로 배열.
List, Set은 .add이고 [ ]안에 담김.
Map은 .put이고 { }안에 담김.
Stack은 .push이고 [ ]안에 담김.
Queue는 .add이고 [ ]안에 담김.
ArrayDeque는 .addFirst, .addLast이고 [ ]에 담김.
강의 자료 : https://www.notion.so/80db7f3685304ab3ac749e0e9cd29b30#1ec7e992c46b4e2c9f0c69d2fe41929e
[스파르타코딩클럽] 자바 문법 뽀개기
매 주차 강의자료 시작에 PDF파일을 올려두었어요!
www.notion.so
'항해99 > Java 문법 뽀개기' 카테고리의 다른 글
객체지향언어 (4) 접근제어자 (0) | 2022.10.01 |
---|---|
자바문법뽀개기(19) - Retrofit, OpenAPI (0) | 2022.09.28 |
자바문법뽀개기(16) - 컬렉션(리스트, 셋, 맵) (0) | 2022.09.27 |
자바문법뽀개기(15) - 날짜와 시간 다루기 (0) | 2022.09.27 |
자바문법뽀개기(14) - 예외, 에러 처리 (1) | 2022.09.27 |