본문 바로가기
Java/Java

컬렉션/List<E>) Stack<E>, 주요 메소드

by 박채니 2022. 3. 31.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


컬렉션이란?

- 동일한 타입을 묶어 관리하는 자료 구조

 

컬렉션 프레임워크란?

- 리스트, 스택, 큐, 트리 등의 자료구조에 정렬, 탐색 등의 알고리즘을 구조화해 놓은 프레임워크

- 여러 개의 데이터 묶음 자료를 효과적으로 처리하기 위해 구조화된 클래스 또는 인터페이스의 모음

 

컬렉션의 특성에 따라 구분하면 크게 List<E>, Set<E>, Map<K, V>로 나뉩니다.

메모리의 입출력 특성에 따라 기존 컬렉션 기능을 확장/조합한 Stack<E>, Queue<E>도 있습니다.(사진에선 누락)

 


☞ Stack<E> 컬렉션 클래스

- 유일한 클래스이므로 객체 생성이 가능

- Vector<E>의 자식 클래스

- LIFO : 후입선출 자료구조를 구현 (나중에 입력된 데이터가 먼저 출력) 

 

Stack<E> 주요 메소드

구분 리턴 타입 메소드명 기능
데이터 추가 E push(E item) 매개변수의 item을 Stack<E>에 추가
데이터 확인 E peek() 가장 상위에 있는 원솟값 리턴(데이터에는 변화 없음)
데이터 위치 검색 int search(Object o) Stack 원소의 위칫값을 리턴
(맨 위의 값이 1, 아래로 내려갈수록 1씩 증가)
데이터 추출 E pop() 최상위 데이터 꺼내기(데이터의 개수 감소)
empty 여부 검사 boolean empty() Stack<E> 객체가 비어 있는 지 여부를 리턴

 

Stack<E> 클래스 객체 생성

Stack<제네릭 타입 지정> 참조변수 = new Stack<제네릭 타입 지정>();

Stack<Integer> stack = new Stack<>();	// 우항 제네릭타입 생략 가능

 

메소드 사용해보기

 

데이터 추가

//데이터 추가
stack.push(1);
stack.push(2);
stack.push(3);

 

데이터 확인 (실제 추출은 아님)

//데이터 확인
System.out.println(stack.peek());

@콘솔출력값
3

가장 위에 있는 데이터만 잠깐 꺼내서 확인하는 것이기 때문에 실제 데이터 추출은 아니므로 데이터에 변화는 없습니다.

 

데이터 위치 검색

//데이터 위치 검색
System.out.println(stack.search(1));

@콘솔출력값
3

가장 꼭대기의 위치가 1이며, 아래쪽으로 내려갈수록 1씩 증가, 만일 해당 데이터가 없다면 -1을 리턴합니다.

 

데이터 추출

//데이터 추출
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());

@콘솔출력값
3
2
1

 

empty 여부 검사

//empty 여부 검사
System.out.println(stack.isEmpty());

@콘솔출력값
true

 

※ 주의점

Stack<E>은 Vector<E>의 자식 클래스입니다.

따라서 Vector<E>에 포함 되어 있는 add() 메소드나 remove() 메소드로도 데이터의 추가 및 삭제가 가능합니다.

다만, Vector<E>의 메소드(add, remove 등)을 사용하게 되면 LIFO의 특성이 반영되지 않습니다.

따라서 Stack<E> 본연의 특징을 갖기 위해선 해당 메소드들만 사용하는 것이 좋습니다.