* 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
'Back-End > Java' 카테고리의 다른 글
[JAVA] 컬렉션 프레임워크(Collection Framework) - Map (0) | 2021.09.17 |
---|---|
[JAVA] 컬렉션 프레임워크(Collection Framework) - Set (0) | 2021.09.17 |
[Java] 컬렉션 프레임워크_LinkedList (0) | 2021.09.17 |
[JAVA] 컬렉션 프레임워크 개념과 ArrayList (0) | 2021.09.17 |
[Java] 제네릭(Generic) (지네릭스) (0) | 2021.09.17 |
댓글