스택, 큐, 덱 자료구조
스택 (Stack)
- 가장 먼저 저장된 데이터가 가장 마지막에 빠져나오는 자료구조이다.
- LIFO (last-in-first-out) : 먼저 저장된 데이터가 마지막에 빠져나간다.
큐 (Queue)
- 가장 먼저 저장된 데이터가 가장 먼저 빠져나오는 자료구조이다.
- FIFO (first-in-first-out) : 먼저 저장된 데이터가 먼저 빠져나간다.
덱 (Deque)
- 양쪽 끝에서 넣고 빼는 것이 가능한 자료구조이다.
- 덱은 스택처럼 사용하는 것이 가능하며, 뿐만 아니라 큐처럼 사용할 수도 있다.
- public interface Deque<E> extends Queue<E>
Queue
Queue 인터페이스 메서드
메소드 | 설명 |
boolean add(E e) | 넣기 |
E remove( ) | 꺼내기 |
E element( ) | 확인하기 |
boolean offer(E e) | 넣기, 넣을 공간이 부족하다면 false 반환 |
E poll( ) | 꺼내기, 꺼낼 대상이 없으면 null 반환 |
E peek( ) | 확인하기, 확인할 대상이 없으면 null 반환 |
- add, remove, element 메소드는 꺼낼 인스턴스가 없거나 저장 공간이 부족할 때 예외를 발생시킨다.
- offer, poll, peep 메소드는 동일한 상황에서 예외를 발생시키지 않고 해당 상황을 알리기 위한 특정 값(null 또는 false)을 반환한다.
Queue 컬렉션 클래스
- LinkedList<E>
- LinkedList<E> 는 List<E>를 구현하면서 동시에 Queue<E>를 구현하는 컬렉션 클래스이다.
(어떠한 타입의 참조변수로 참조하느냐에 따라 리스트로도 동작하고, 큐로도 동작한다.)
- LinkedList<E> 는 List<E>를 구현하면서 동시에 Queue<E>를 구현하는 컬렉션 클래스이다.
class QueueCollection_LinkedList {
public static void main(String[] args) {
Queue<String> que = new LinkedList<>(); // LinkedList<E> 인스턴스 생성
// 인스턴스 저장하기 (offer)
que.offer("Box");
que.offer("Toy");
que.offer("Robot");
// 무엇이 다음에 나올지 확인 (peek)
System.out.println("next: " + que.peek());
// 첫번째, 두번째 인스턴스 꺼내기 (poll)
System.out.println(que.poll());
System.out.println(que.poll());
// 무엇이 다음에 나올지 확인 (peek)
System.out.println("next: " + que.peek());
// 마지막 인스턴스 꺼내기 (poll)
System.out.println(que.poll());
}
}
// 실행 결과
next: Box
Box
Toy
next: Robot
Robot
Deque (스택의 구현)
Stack<E> 클래스는 자바 초기에 정의된 클래스로써 성능의 저하가 발생해, 자바 6에서 이를 대신할 수 있는 덱(Deque)이라는 자료구조가 포함되었다. 따라서 덱을 기준으로 스택을 구현하는 것이 자바에서의 원칙이다.
Deque 인터페이스 메서드
- 스택이 필요하다면, Deque<E> 인터페이스를 구현한 컬렉션 클래스의 인스턴스를 대상으로 쌍을 이루어(한쪽 방향)
메소드를 호출하면 된다. - 예) offerFirst & pollFirst / offerLast & pollLast
앞으로 넣고, 꺼내고, 확인하기 | |
void addFirst(E e) | 넣기 |
E removeFirst( ) | 꺼내기 |
E getFirst( ) | 확인하기 |
boolean offerFirst(E e) | 넣기, 공간이 부족하면 false 반환 |
E pollFirst( ) | 꺼내기, 꺼낼 대상 없으면 null 반환 |
E peekFirst( ) | 확인하기, 확인할 대상 없으면 null 반환 |
뒤로 넣고, 꺼내고, 확인하기 | |
void addLast(E e) | 넣기 |
E removeLast( ) | 꺼내기 |
E getLast( ) | 확인하기 |
boolean offerLast(E e) | 넣기, 공간이 부족하면 false 반환 |
E pollLast( ) | 꺼내기, 꺼낼 대상 없으면 null 반환 |
E peekLast( ) | 확인하기, 확인할 대상 없으면 null 반환 |
Deque 컬렉션 클래스
- ArrayDeque<E>
- LinkedList<E>
- LinkedList<E>는 Deque<E>, List<E>, Queue<E> 인터페이스를 동시에 구현하는 컬렉션 클래스이다.
(어떠한 타입의 참조변수로 참조하느냐에 따라 덱, 리스트, 큐로 동작한다.)
- LinkedList<E>는 Deque<E>, List<E>, Queue<E> 인터페이스를 동시에 구현하는 컬렉션 클래스이다.
class DequeCollection_ArrayDeque {
public static void main(String[] args) {
Deque<String> deq = new ArrayDeque<>(); // 배열을 기반으로 하는 덱의 구성
// Deque<String> deq = new LinkedList<>(); // 리스트를 기반으로 하는 덱의 구성
// 앞으로 넣고 (offerFirst)
deq.offerFirst("1.Box");
deq.offerFirst("2.Toy");
deq.offerFirst("3.Robot");
// 앞에서 꺼내기 (pollFirst)
System.out.println(deq.pollFirst());
System.out.println(deq.pollFirst());
System.out.println(deq.pollFirst());
}
}
// 실행 결과
3.Robot
2.Toy
1.Box
Reference
https://bangu4.tistory.com/194
'☕ Java > 이론' 카테고리의 다른 글
[Java] 네스티드 클래스, 이너 클래스 (0) | 2022.01.27 |
---|---|
[Java] 가변인자, 어노테이션 (0) | 2022.01.26 |
[Java] 열거형 (enum) (0) | 2022.01.26 |
[Java] 컬렉션 기반 알고리즘 (sort, binarySearch, copy) (0) | 2022.01.25 |
[Java] Set 컬렉션 클래스 (0) | 2022.01.25 |
[Java] List 컬렉션 클래스 (0) | 2022.01.25 |
[Java] Map 컬렉션 클래스 (0) | 2022.01.25 |
[Java] 컬렉션 프레임워크 (0) | 2022.01.18 |