안녕하세요
이번 포스팅에서는 Stack에 대해서 알아보겠습니다
목차
Stack란?
Stack 선언하기
Stack 값 추가하기
Stack 값 삭제하기
Stack 크기 구하기
Stack 값 출력하기
Stack 값 검색하기
Stack란?
사전적 의미로는 '쌓다', '더미'라는 뜻을 가지고 있습니다
또한 Collection 프레임워크의 일부이며 java.util 패키에서 소속되어 있습니다
Stack의 가장 큰 특징은 후입선출(LIFO : Last In First Out)입니다
위와 같은 원리로 동작된다고 보시면 됩니다
Stack 선언하기
Stack st = new Stack(); // 타입 설정x Object로 선언
Stack<StackDemo> demo = new Stack<StackDemo>(); // class타입으로 선언
Stack<Integer> i = new Stack<Integer>(); // Integer타입 선언
Stack<Integer> i2 = new Stack<>(); // 뒤의 타입 생략 가능
Stack<String> s = new Stack<String>(); // String타입 선언
Stack<Character> ch = new Stack<Character>(); // Char타입 선언
Stack의 선언 방법입니다
Stack<타입> 변수명 = new Stack<타입>(); 으로 선언합니다
타입 선언의 생략이 가능하지만 처음 들어간 동일한 타입으로 입력을 계속하지 않으면 타입에러가 발생하므로 타입을 명확하게 선언하는게 좋습니다
타입은 Integer, String, Character 등 여러가지 형태로 선언이 가능합니다
Stack 값 추가하기
import java.util.Stack;
public class StackDemo {
public static void main(String[] args) {
Stack<String> s = new Stack<String>();
// Stack 값 추가
s.push("Hello");
s.push("World");
System.out.print(s); // 결과 출력
}
}
push() 메서드를 사용하여 값을 추가할 수 있습니다
다른 배열들과는 다르게 LIFO 방식을 사용하므로 도중에 데이터를 삽입하는 것이 불가능합니다
결과
Stack 값 삭제하기
import java.util.Stack;
public class StackDemo {
public static void main(String[] args) {
Stack<String> s = new Stack<String>();
// Stack 값 추가
s.push("Hello");
s.push("World");
System.out.println(s); // 결과 출력
s.pop(); // Stack 값 제거
System.out.println(s); // 결과 출력
s.clear(); // Stack 값 전체 제거
System.out.println(s); // 결과 출력
}
}
pop() 메서드를 사용하면 Stack에서 값을 삭제합니다
값은 LIFO를 따라서 맨 마지막에 Input한 값을 삭제합니다
clear() 메서드를 사용하면 Stack의 모든 값을 삭제합니다
결과
Stack 크기 구하기
import java.util.Stack;
public class StackDemo {
public static void main(String[] args) {
Stack<String> s = new Stack<String>();
// Stack 값 추가
s.push("Hello");
s.push("World");
System.out.println("Size : " + s.size()); // 결과 출력
}
}
Stack의 크기는 size() 메서드를 사용하여 구할 수 있습니다
Stack안에 있는 값의 갯수를 출력합니다
결과
Stack 값 출력하기
import java.util.Iterator;
import java.util.Stack;
public class StackDemo {
public static void main(String[] args) {
Stack<String> s = new Stack<String>();
// Stack 값 추가
s.push("Hello");
s.push("World");
// firstElement(), lastElement(), peek()을 사용 -> 처음, 마지막, 마지막 값을 불러온다
System.out.println("처음 값 : " + s.firstElement());
System.out.println("마지막 값 : " + s.lastElement());
System.out.println("마지막 값 : " + s.peek());
// get(i) 메서드를 사용하여 Stack의 Index 값을 출력
for(int i = 0; i < s.size(); i++)
System.out.print(s.get(i) + " ");
System.out.println();
// 향상된for문을 사용하여 Stack의 값을 출력
for(String str: s)
System.out.print(str + " ");
// Iterator를 사용하여 Stack의 값을 출력
Iterator iter = s.iterator();
while(iter.hasNext())
System.out.print(iter.next() + " ");
}
}
firstElement() 메서드를 사용하여 Stack의 맨 처음 Input한 값을 찾을 수 있습니다
lastElement(), peek() 메서드를 사용하여 Stack의 맨 마지막에 Input한 값을 꺼내올 수 있습니다
lastElement()와 peek()의 구조적인 차이점은 아직 저도 잘 모르겠습니다 ㅠ
Stack이 만약 Empty() 상태라면
peek에서는 EmptyStackException 에러를 던져줍니다
lastElement에서는 NoSuchElementException 에러를 던져줍니다
get(int Index) 메서드를 사용하면 해당 Index의 값을 찾아 호출해줍니다
for문, 향상된 반복문, Iterator클래스를 사용하여 Stack의 값을 모두 표시해줄 수 있습니다
결과
Stack 값 검색하기
import java.util.Stack;
public class StackDemo {
public static void main(String[] args) {
Stack<String> s = new Stack<String>();
// Stack 값 추가
s.push("Hello");
s.push("World");
s.push("Hello");
s.push("World");
System.out.println("값 검색(contains) : " + s.contains("Hello"));
System.out.println("값 검색(indexOf) : " + s.indexOf("Hello"));
}
}
Stack의 값 검색방법입니다
contains()와 indexOf()가 대표적으로 있습니다
contains(Obejct) : 메서드를 호출하면 값의 여부를 찾아 true, false를 반환합니다
indexOf(int Index) : 메서드를 호출하면 값을 위치 Index를 반환합니다
결과
이상 JAVA의 Stack의 개념 및 사용법에 대해서 정리해봤습니다
이번 포스팅을 작성하는데 참고한 블로그입니다
참고 : https://coding-factory.tistory.com/601
추가로 참고한 사이트입니다
개념과 예제는 Geek에서 참고했습니다
Geek에서는 제 포스팅에 적은 메서드 외에도 다른 여러 메서드의 설명이 적혀있습니다
추가로 알고 싶다면 Geek에 들어가서 확인바랍니다!
https://www.geeksforgeeks.org/stack-class-in-java/
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA] Queue의 개념 및 사용법 정리 (1) | 2021.05.22 |
---|---|
[JAVA] Vector의 개념 및 사용법 (0) | 2021.05.22 |
[JAVA] LinkedList의 개념 및 사용법 (2) | 2021.05.20 |
[JAVA] 반복자(Enumeration, Iterator, ListIterator) (0) | 2021.05.18 |
[JAVA] ArrayList의 개념 및 사용법 (0) | 2021.05.18 |