Stack <E> 클래스
Stack <E> 클래스는 List 컬렉션 클래스의 Vector 클래스를 상속받아, 전형적인 스택 메모리 구조의 클래스를 제공합니다.
스택 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 후입선출(Last In First Out)의 시멘틱을 따르는 자료 구조입니다.
즉, 가장 나중에 저장된 데이터가 가장 먼저 인출되는 구조입니다.
위 예제를 보면서 후입선출을 이해해 봅시다.
Stack 클래스는 stack memory structure를 표현하기 위해, Vector 클래스의 메서드를 5개만 상속받아 사용합니다.
메서드 | 설명 |
boolean empty() | 해당 스택이 비어 있으면 true를, 비어 있지 않으면 false를 반환 |
E peek() | 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환 |
E pop() | 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환하고, 햐당 요소를 스택에서 삭제 |
E push(E item) | 해당 스택의 제일 상단에 요소를 삽입 |
int search(Object o) | 해당 스택에서 전달된 객체가 존재하는 위치의 인덱스를 반환 이때 인덱스는 제일 상단에 있는(제일 마지막으로 저장된) 요소의 위치부터 0이 아닌 1부터 시작 |
아래의 코드 예제를 보면서 스택의 동작을 확인해 봅시다.
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<Integer> st = new Stack<>();
//Deque<Integer> st = new ArrayDeque<Integer>();
// push() 메서드를 이용한 요소 저장
st.push(4);
st.push(2);
st.push(3);
st.push(1);
// peek() 메서드를 통한 요소 반환
System.out.println(st.peek());
System.out.println(st);
//pop() 메서드를 이용한 요소의 반환 및 제거
System.out.println(st.pop());
System.out.println(st);
//search() 메서드를 이용한 요소의 위치 검색
System.out.println(st.search(4));
System.out.println(st.search(3));
}
}
// 출력 결과
1
[4, 2, 3, 1]
1
[4, 2, 3]
3
1
Queue <E> 인터페이스
클래스로 구현된 스택과는 달리 큐 메모리 구조는 별도의 인터페이스 형태로 제공됩니다.
이러한 Queue 인터페이스를 상속받는 하위 인터페이스는 다음과 같습니다
- Deque <E>
- BlockingQueue <E>
- BlockingQueue <E>
- TransferQueue <E>
이 중 Deque 인터페이스를 구현한 LinkedList 클래스가 큐 메모리 구조를 구현하는 데 가장 많이 사용됩니다.
큐의 메모리 구조는 선형 메모리 공간에서 데이터를 저장하면서 선입선출(FIFO)의 시멘틱을 따르는 자료 구조입니다.
즉, 가장 먼저 저장된 데이터가 가장 먼저 인출되는 구조입니다.
Queue 인터페이스는 큐 메모리 구조를 표현하기 위해, 다음과 같은 Collection 인터페이스 메서드를 상속받습니다.
메서드 | 설명 |
boolean add(E e) | 큐의 맨 뒤에 전달된 요수를 삽입함 삽입 성공시 true 반환하고, 큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateException을 발생 |
E element() | 큐의 맨 앞에 있는 요소를 반환 (제일 먼저 저장된) |
boolean offer(E e) | 해당 큐의 맨 뒤에 전달된 요소를 삽입. |
E peek() | 해당 큐의 맨 앞에 있는 요소를 반환. 만약 큐가 비어있으면 null을 반환 |
E poll() | 큐의 맨 앞에 있는 요소를 반환하고, 해당 요소를 큐에서 제거함. 만약 큐가 비어있으면 null을 반환 |
E remove() | 큐의 맨 앞에 있는 요소를 제거 |
다음 예제 코드를 보며 큐 메모리 구조를 이해해 봅시다.
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
LinkedList<String> qu = new LinkedList<>();
//Deque<String> qu = new ArrayDeque<String>();
// add() 메서드를 이용한 요소의 저장
qu.add("넷");
qu.add("둘");
qu.add("셋");
qu.add("하나");
// peak() 메서드를 이용한 요소의 반환
System.out.println(qu.peek());
System.out.println(qu);
// poll() 메서드를 이용한 요소 반환 및 제거
System.out.println(qu.poll());
System.out.println(qu);
// remove() 메서드를 이요한 요소의 제거
qu.remove("하나");
System.out.println(qu);
}
}
// 출력 결과
넷
[넷, 둘, 셋, 하나]
넷
[둘, 셋, 하나]
[둘, 셋]
reference
'JAVA' 카테고리의 다른 글
[JAVA] 어노테이션 (Annotation) (0) | 2023.03.12 |
---|---|
[JAVA] 컬렉션 프레임워크(Collection Framework) - Iterator (6) (0) | 2023.03.11 |
[JAVA] 컬렉션 프레임워크(Collection Framework) - Map <K,V> (4) (2) | 2023.03.10 |
[JAVA] 컬렉션 프레임워크(Collection Framework) - Set <E> (3) (0) | 2023.03.10 |
[JAVA] 컬렉션 프레임워크(Collection Framework) - List <E> (2) (0) | 2023.03.09 |