안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
컬렉션이란?
- 동일한 타입을 묶어 관리하는 자료 구조
컬렉션 프레임워크란?
- 리스트, 스택, 큐, 트리 등의 자료구조에 정렬, 탐색 등의 알고리즘을 구조화해 놓은 프레임워크
- 여러 개의 데이터 묶음 자료를 효과적으로 처리하기 위해 구조화된 클래스 또는 인터페이스의 모음
컬렉션의 특성에 따라 구분하면 크게 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> 본연의 특징을 갖기 위해선 해당 메소드들만 사용하는 것이 좋습니다.
'Java > Java' 카테고리의 다른 글
컬렉션/Set<E>) HashSet<E>, 주요 메소드, 중복 제거 (0) | 2022.03.31 |
---|---|
컬렉션/List<E>) Queue<E>, 주요 메소드 (0) | 2022.03.31 |
컬렉션/List<E>) LinkedList<E>, 주요 메소드 (0) | 2022.03.31 |
컬렉션/List<E>) Vector<E>, 주요 메소드 (0) | 2022.03.31 |
컬렉션/List<E>) ArrayList<E>, 주요 메소드, 기본 정렬, 기타 정렬 (0) | 2022.03.31 |