Stack
Stack은 제한적으로 접근할 수 있는 나열 구조로 데이터를 저장하는 자료구조로
후입선출( LIFO - Last Input First Out ) 방식이다.
Stack은 리스트 계열 클래스의 Vector 클래스를 상속 받아 구현하였다.
스택 메모리 구조는 선형 메모리 공간에 데이터를 저장한다.
데이터를 넣는 Push 동작과 데이터를 빼는 Pop 동작을 수행한다.
Stack 인스턴스 생성
Stack<Integer> integerStack = new Stack<>();
Stack에 값을 넣을 때는 push() 메소드를 이용한다.
add()도 이용 가능하지만 Vector의 메소드이므로 push()를 사용하는 것이 좋다.
integerStack.push(1);
integerStack.push(2);
integerStack.push(3);
integerStack.push(4);
integerStack.push(5);
스택에서 요소를 찾을 때 search()를 이용할 수 있다.
인덱스가 아닌 위에서부터의 순번을 의미한다.
또한 가장 상단의 위치가 0이 아닌 1부터 시작한다.
System.out.println(integerStack.search(5));
stack에서 값을 꺼내는 메소드는 크게 2가지로 볼 수 있다.
peek() : 해당 스택의 가장 마지막에(상단에 있는) 요소 반환
System.out.println("peek() : " + integerStack.peek());
System.out.println(integerStack);
peek() : 5
[1, 2, 3, 4, 5]
pop() : 해당 스택의 가장 마지막에 있는(상단에 있는) 요소 반환 후 제거
System.out.println("pop() : " + integerStack.pop());
System.out.println(integerStack);
pop() : 5
[1, 2, 3, 4] //5가 제거되었다.
pop은 꺼내면서 요소를 제거하기 때문에 스택이 비어있는 경우 에러가 발생할 수 있다.
System.out.println("pop() : " + integerStack.pop());
System.out.println("pop() : " + integerStack.pop());
System.out.println("pop() : " + integerStack.pop());
System.out.println("pop() : " + integerStack.pop());
// System.out.println("pop() : " + integerStack.pop()); //EmptyStackException 발생
pop() : 4
pop() : 3
pop() : 2
pop() : 1
Queue
Queue는 선형 메모리 공간에 데이터를 저장하는
선입선출(FIFO - First Input First Out) 방식의 자료구조이다.
Queue 인터페이스를 상속 받는 하위 인터페이스들은
Deque, BlockingQueue, TransferQueue 등 다양하지만
대부분의 큐는 LinkedList를 이용한다.
Queue 자체로는 인터페이스이기 때문에 인스턴스 생성이 불가능하다.
//Queue<String> que = new Queue<>();
LinkedList로 인스턴스 생성
Queue<String> que = new LinkedList<>();
큐에 데이터를 넣을 때에는 offer()를 이용한다.
que.offer("first");
que.offer("second");
que.offer("third");
que.offer("fourth");
que.offer("fifth");
큐에서 데이터를 꺼낼 때는 2가지 메소드가 있다.
peek() : 해당 큐의 가장 앞에 있는 요소(먼저 들어온 요소)를 반환한다.
System.out.println("peek() : " + que.peek());
System.out.println(que);
peek() : first
[first, second, third, fourth, fifth]
poll() : 해당 큐의 가장 앞에 있는 요소(먼저 들어온 요소)를 반환하고 제거한다.
System.out.println("poll() : " + que.poll());
System.out.println(que);
poll() : first
[second, third, fourth, fifth] // first가 제거되었다.
스택과 큐 .. 정처산기 시험으로 자료구조로 배웠는데, 이렇게 사용되는구나..
사실 아직 어느 상황에 이러한 자료구조를 사용하게 되는지는 모르겠다.
'백엔드 과정 > Java' 카테고리의 다른 글
[Java] 국비교육 day21. 예외처리 Exception (0) | 2022.01.12 |
---|---|
[Java] day20. 컬렉션 프레임워크 Set / Map (0) | 2022.01.12 |
[Java] day19. 컬렉션 프레임워크 LinkedList (0) | 2022.01.11 |
[Java] day19. 컬렉션 프레임워크 ArrayList (0) | 2022.01.11 |
[Java] day18 제네릭(Generic) ~ 토끼농장 ~ (0) | 2022.01.07 |