본문 바로가기
Back-End/Java

[JAVA] 컬렉션 프레임워크(Collection Framework) - Stack, Queue

by 찐코딩 2021. 9. 17.

* Stack 클래스(자료 구조)

후입선출(LIFO : Last In First Out) 구조

=> 제일 나중에 들어온 데이터가 호출 시 제일 먼저 빠져나감

선언은 아래와 같이 할 수 있다.

Stack<Element> stack = new Stack<>();
// Element에는 Integer과 String이 올 수 있다.
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
Stack<String> stack = new Stack<>(); //char형 스택 선언

 

push(데이터)

stack에 저장시키는 메소드

데이터가 위로 쌓이듯이 저장된다.

 

peek()

stack에 저장된 데이터를 가져오는 메소드

=> stack의 맨 위(마지막)에 입력된 데이터를 가져오는 메소드 가져온 후, 데이터를 stack에서 제거하지 않음

즉, 마지막 값을 '확인'만 하고자 할 때 사용

 

pop()

stack에 저장된 데이터를 가져오는 메소드

==> stack의 맨 위(마지막)에 입력된 데이터를 가져오는 메소드, 가져온 후 데이터를 stack에서 제거함

즉, 마지막 값을 '꺼내고자'할  때 사용

 

size()

현재 스택에 들어있는 데이터의 개수를 리턴

 

empty()

스택이 비어있는지 여부를 판단

비어있으면 true, 데이터가 있으면 false 반환

 

contains()

Stack에 특정 데이터가 포함되어 있는지 체크

있으면 true, 없으면 false 반환

 

clear()

stack의 전체 값 제거 (초기화)

package collection;

import java.util.Stack;

public class Ex06 {

	public static void main(String[] args) {
		
		// String형 stack선언
		Stack<String> stack = new Stack<String>();
		
		// 1. push()
		System.out.println("push() 메소드");
		stack.push("강감찬");
		stack.push("세종대왕");
		stack.push("김 구");
		stack.push("윤봉길");
		stack.push("홍범도");
	
		
		// 2. peek() 
		System.out.println("peek() 메소드");
		System.out.println("stack peek() : " + stack.peek());
		
		// 3. pop()
		System.out.println("pop() 메소드");
		while(!stack.isEmpty()) {			// 비어있지 않느냐 라고 물어보는 것
			System.out.println("이    름 :" + stack.pop());
		}
		
		// 4. size()
		System.out.println("size() 메소드");
		System.out.println("stack의 사이즈 : "+stack.size());
		
		// 5. empty()
		System.out.println("empty() 메소드");
		System.out.println("stack이 비워져 있습니까?");
		System.out.println(stack.empty());
		
	}

}

결과

push() 메소드
peek() 메소드
stack peek() : 홍범도
pop() 메소드
이    름 :홍범도
이    름 :윤봉길
이    름 :김 구
이    름 :세종대왕
이    름 :강감찬
size() 메소드
stack의 사이즈 : 0
empty() 메소드
stack이 비워져 있습니까?
true

while문을 통해 stack의 모든 데이터를 다 pop(꺼내다)했으므로

size 메소드를 통해 stack의 데이터 갯수가 0, empty 메소드를 통해 stack이 비워져있는 것을 확인 할 수 있다.

 

* Queue 인터페이스(자료구조)

 - 인터페이스이므로 자식클래스로 객체 생성하여 사용.
 - 대표적인 자식클래스는  LinkedList임.
 - 특징 : 선입선출(FIFO : First In First Out) 구조임

=> 제일 먼저 들어온 데이터가 호출 시 제일 먼저 빠져나감

 

선언은 아래와 같이 한다. 특이점으로는 LinkedList와 Queue 둘 다 호출해야만 사용이 가능하다.

import java.util.LinkedList; //import
import java.util.Queue; //import

Queue<Element> queue = new LinkedList<>();
//Element에는 Integer와 String이 올 수 있음
Queue<Integer> queue = new LinkedList<>(); //int형 queue 선언, linkedlist 이용
Queue<String> queue = new LinkedList<>(); //String형 queue 선언, linkedlist 이용

 

offer()

queue에 저장하는 메소드

값 추가에 성공하면 true 반환

값 추가에 실패하면 false 반환

 

add()

queue에 저장하는 메소드

값 추가에 성공하면 true 반환

큐에 여유 공간이 없어서 추가에 실패하면 IllegalStateException 발생

 

peek()

queue에 저장된 첫번째 데이터를 가져오는 메소드, queue에서 데이터를 제거하지 않는 메소드

즉, 첫번째 값을 '확인'만 하고자 할 때 사용

 

poll()

queue에서 첫번째 데이터를 제거하는 메소드

즉, 첫번째 값을 '꺼내고자'할  때 사용

꺼낼 수 있는 데이터가 없는 경우(queue가 비워져 있는 경우) null을 반환

 

remove()

queue에서 첫번째 데이터를 제거하는 메소드

꺼낼 수 있는 데이터가 없는 경우(queue가 비워져 있는 경우) Exception이 발생

 

isEmpty()

큐가 비어있는지 여부를 판단

비어있으면 true, 데이터가 있으면 false 반환

package collection;

import java.util.LinkedList;
import java.util.Queue;

public class Ex07 {

	public static void main(String[] args) {
		
		Queue<String> queue = new LinkedList<String>();
		
		// 1. offer() 
		System.out.println("offer() 메소드");
		queue.offer("100번");
		queue.offer("101번");
		queue.offer("102번");
		queue.offer("103번");
		queue.offer("104번");
		queue.offer("105번");
		
		
		// 2. peek() 
		System.out.println("peek() 메소드");
		System.out.println("처음 호출한 번호 : " + queue.peek());
		
		// 3. poll() 
		System.out.println("poll() 메소드");
		while(!queue.isEmpty()) {
			System.out.println("호출한 번호 : " + queue.poll());
		}
		
		// 4. isEmpty()
		System.out.println("isEmpty() 메소드");
		System.out.println("stack이 비워져 있습니까?");
		System.out.println(queue.isEmpty());

	}

}

결과

offer() 메소드
peek() 메소드
처음 호출한 번호 : 100번
poll() 메소드
호출한 번호 : 100번
호출한 번호 : 101번
호출한 번호 : 102번
호출한 번호 : 103번
호출한 번호 : 104번
호출한 번호 : 105번
isEmpty() 메소드
stack이 비워져 있습니까?
true

 

댓글