1. Stack
: 후입선출(LIFO :Last In First Out)
A. 자료 입력
- push(입력값)
B. 자료 출력
- pop() : 자료를 꺼내온 후 꺼내온 자료를 Stack에서 삭제한다.
- peek() : 삭제없이 자료를 꺼내온다.
C. 코드
public class StackQueueTest {
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
stack.push("홍길동");
stack.push("일지매");
stack.push("성춘향");
stack.push("변학도");
System.out.println("현재 stack ==> " + stack);
System.out.println();
String data = stack.pop();
System.out.println("꺼내온 값 : " + data);
System.out.println("꺼내온 값 : " + stack.pop());
System.out.println("현재 stack ==> " + stack);
stack.push("강감찬");
System.out.println("현재 stack ==> " + stack);
System.out.println("꺼내온 값 : " + stack.pop());
System.out.println("현재 stack ==> " + stack);
System.out.println("삭제없이 꺼내온 값 : " + stack.peek());
System.out.println("현재 stack ==> " + stack);
}
}
2. Queue
: 선입선출(FIFO : First In First Out)
A. 자료 입력
- offer(입력값)
B. 자료 출력
- poll() : 자료를 꺼내오고 꺼내온 자료를 Queue에서 삭제한다.
- peek() : 삭제없이 자료를 꺼내온다.
*Queue는 LinkedList를 이용해서 사용할 수 있다.
C. 코드
public class StackQueueTest {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.offer("홍길동");
queue.offer("일지매");
queue.offer("성춘향");
queue.offer("변학도");
System.out.println("현재 Queue ==> " + queue);
System.out.println();
String temp = queue.poll();
System.out.println("꺼내온 값 : " + temp);
System.out.println("꺼내온 값 : " + queue.poll());
System.out.println("현재 Queue ==> " + queue);
queue.offer("강감찬");
System.out.println("현재 Queue ==> " + queue);
System.out.println("꺼내온 값 : " + queue.poll());
System.out.println("현재 Queue ==> " + queue);
System.out.println("삭제없이 꺼내온 값 : " + queue.peek());
System.out.println("현재 queue ==> " + queue);
}
}
3. StackTest
A. Browser 클래스
// 웹브라우저의 앞으로 가기, 뒤로 가기 기능 구현하기 (스택 이용)
class Browser{
private Stack<String> back; // 이전 방문 내역이 저장될 스택
private Stack<String> forward; // 다음 방문 내역이 저장될 스택
private String currentURL;
public Browser() {
back = new Stack<>();
forward = new Stack<>();
currentURL = "";
}
// 사이트를 방문하는 메서드 ==> 매개변수에는 방문할 URL이 저장된다.
public void goURL(String url) {
System.out.println(url + "사이트로 이동합니다.");
if(currentURL != null && !"".equals(currentURL)) { // 현재 페이지가 있으면
back.push(currentURL); // 현재 페이지를 back 스택에 추가한다.
}
currentURL = url; // 현재 페이지를 이동할 페이지로 변경한다.
forward.clear(); // forward 스택 비우기
}
// 뒤로 가기 메서드
public void goBack() {
// isEmptu() ==> 컬렉션이 비었는지 여부를 검사하는 메서드
if (!back.isEmpty()) { // back 스택이 비어있지 않으면
forward.push(currentURL); // 현재 페이지를 forward 스택에 추가한다.
currentURL = back.pop(); // back 스택에서 꺼내온 데이터를 현재 페이지로 한다.
}
}
// 앞으로 가기 메서드
public void goForward() {
if (!forward.isEmpty()) { // forward 스택이 비어있지 않으면
back.push(currentURL); // 현재 페이지를 back 스택에 추가한다.
currentURL = forward.pop(); // forward 스택에서 꺼내온 데이터를 현재 페이지로 한다.
}
}
// 방문 기록 확인하는 메서드
public void history() {
System.out.println();
System.out.println("\t방 문 기 록");
System.out.println("----------------------");
System.out.println("back => " + back);
System.out.println("현재 => " + currentURL);
System.out.println("forward => " + forward);
System.out.println("----------------------");
System.out.println();
}
}
B. main 메서드
Browser b = new Browser();
b.history();
b.goURL("1. 네이버");
b.history();
b.goURL("2. 구글");
b.history();
b.goURL("3. 다음");
b.goURL("4. 네이트");
b.history();
System.out.println("뒤로가기 후...");
b.goBack();
b.history();
System.out.println("뒤로가기 후...");
b.goBack();
b.history();
System.out.println("앞으로 가기 후...");
b.goForward();
b.history();
System.out.println("새로운 사이트로 접속한 후...");
b.goURL("5. DDIT");
b.history();
C. 전체 코드
package kr.or.ddit.basic;
import java.util.Stack;
public class StackTest {
public static void main(String[] args) {
Browser b = new Browser();
b.history();
b.goURL("1. 네이버");
b.history();
b.goURL("2. 구글");
b.history();
b.goURL("3. 다음");
b.goURL("4. 네이트");
b.history();
System.out.println("뒤로가기 후...");
b.goBack();
b.history();
System.out.println("뒤로가기 후...");
b.goBack();
b.history();
System.out.println("앞으로 가기 후...");
b.goForward();
b.history();
System.out.println("새로운 사이트로 접속한 후...");
b.goURL("5. DDIT");
b.history();
}
}
// 웹브라우저의 앞으로 가기, 뒤로 가기 기능 구현하기 (스택 이용)
class Browser{
private Stack<String> back; // 이전 방문 내역이 저장될 스택
private Stack<String> forward; // 다음 방문 내역이 저장될 스택
private String currentURL;
public Browser() {
back = new Stack<>();
forward = new Stack<>();
currentURL = "";
}
// 사이트를 방문하는 메서드 ==> 매개변수에는 방문할 URL이 저장된다.
public void goURL(String url) {
System.out.println(url + "사이트로 이동합니다.");
if(currentURL != null && !"".equals(currentURL)) { // 현재 페이지가 있으면
back.push(currentURL); // 현재 페이지를 back 스택에 추가한다.
}
currentURL = url; // 현재 페이지를 이동할 페이지로 변경한다.
forward.clear(); // forward 스택 비우기
}
// 뒤로 가기 메서드
public void goBack() {
// isEmptu() ==> 컬렉션이 비었는지 여부를 검사하는 메서드
if (!back.isEmpty()) { // back 스택이 비어있지 않으면
forward.push(currentURL); // 현재 페이지를 forward 스택에 추가한다.
currentURL = back.pop(); // back 스택에서 꺼내온 데이터를 현재 페이지로 한다.
}
}
// 앞으로 가기 메서드
public void goForward() {
if (!forward.isEmpty()) { // forward 스택이 비어있지 않으면
back.push(currentURL); // 현재 페이지를 back 스택에 추가한다.
currentURL = forward.pop(); // forward 스택에서 꺼내온 데이터를 현재 페이지로 한다.
}
}
// 방문 기록 확인하는 메서드
public void history() {
System.out.println();
System.out.println("\t방 문 기 록");
System.out.println("----------------------");
System.out.println("back => " + back);
System.out.println("현재 => " + currentURL);
System.out.println("forward => " + forward);
System.out.println("----------------------");
System.out.println();
}
}
'Java' 카테고리의 다른 글
[고급자바] 정렬(Comparator, Comparable) (0) | 2023.03.03 |
---|---|
[고급자바] Set, Ilterator (1) | 2023.03.02 |
[고급자바] ArrayList 문제 (0) | 2023.03.01 |
[고급자바] Collection(List) (0) | 2023.03.01 |
[고급자바] Collection(Vector) (0) | 2023.03.01 |