📌Stack 알아보기
◾Stack 이란
'쌓다'의 뜻을 가진 용어로, 접시를 쌓아 놓은 형태와 유사한 자료구조이다. 데이터를 한 방향으로 순서대로 쌓고, 꺼내는 구조이다. 가장 나중에 들어간 데이터를 가장 먼저 꺼낸다. (LIFO: Last In First Out)
◾Stack 특징
- 후입선출(LIFO): 나중에 들어온 데이터가 가장 먼저 나가는 구조이다.
(Comparable인터페이스 또는 별도의 Comparator를 사용하여 지정이 가능하다.)
- 단방향 입출 구조: 데이터를 한 쪽 끝에서만 접근할 수 있다. 이 접근 포인트를 'Top'이라 한다.
- 빠른 작업 속도: 데이터의 추가와 제거가 상수 시간(O(1))에 이루어져, 스택은 빠른 작업 속도를 제공한다.
- 제한된 접근: 스택은 가장 최근에 추가된 데이터에만 접근이 가능하며, 중간에 있는 데이터는 입출력이 불가능하다.
◾Stack 사용하기
1. 선언하기
Stack<Integer> stack = new Stack<>();
Stack
키워드로 선언한다.
2. 값 추가하기
stack.push(1);
stack.push(2);
stack.push(3);
stack.add(4); // 1234 <-이 방향으로 값이 쌓인다.
push() 또는 add()메서드를 이용해 값을 추가한다. 두 가지 메서드 모두 값을 추가할 수 있으나 push()를 사용하는 것이 스택의 의도에 더 부합하다.
- push() : 스택의 맨 위에 요소를 추가한다.
- add(): 컬렉션에 요소를 추가한다.
3. 값 제거하기
int value = stack.pop();
System.out.println("value = " + value); // value = 4 (4제거,현재 123)
-pop(): 가장 최근에 추가된 데이터가 제거된다.
4. 최상단 값 확인하기
int peekVal = stack.peek();
System.out.println("peekVal = " + peekVal); // peekVal = 3
- peek(): 스택의 맨 위에 위치한 데이터를 가져오며 데이터를 제거하지 않는다.
5. 비어있는지 확인하기
boolean isEmpty = stack.isEmpty();
System.out.println("isEmpty = " + isEmpty); // isEmpty = false
- isEmpty(): 스택이 비어있는지에 따라 true, false를 반환한다.
6. 스택의 사이즈 구하기
int size = stack.size();
System.out.println("size = " + size); //size = 3
- size(): 스택의 사이즈
7. 값의 위치 확인하기
// 현재 스택에 123 존재
System.out.println("stack.search(0) = " + stack.search(0)); // stack.search(0) = -1 (존재X)
System.out.println("stack.search(2) = " + stack.search(2)); // stack.search(2) = 2
System.out.println("stack.search(3) = " + stack.search(3)); // stack.search(3) = 1
- search(값) : 해당 값의 위치를 반환한다.
스택의 끝에서부터 카운트하여. 가장 마지막에 넣은 값이 첫번째 값으로 1이다.
해당 값이 스택에 존재하지 않다면 -1을 반환한다.
8. 값의 존재여부 확인하기
boolean isContain = stack.contains(3);
System.out.println("isContain = " + isContain); // isContain = true
- contains() : 해당 요소가 컬렉션에 포함되어 있는지 확인하고 true, false를 반환한다.
Reference
'웹 개발 > java' 카테고리의 다른 글
[java] PriorityQueue 우선순위 큐 사용하기 (0) | 2024.02.17 |
---|---|
[java] Map 특징 + 사용법 (0) | 2024.02.16 |
Java #4 상수란? (2) | 2023.11.26 |
[java] char형의 값이 0인지 확인할 때 (char형을 정수값과 비교할 때) (0) | 2023.06.05 |
Java #4 변수 (0) | 2023.06.01 |