import java.util.LinkedList; // LinkedList
import java.util.Queue; // Queue
import java.util.Stack; // Stack
public class NewCollection {
public static void main(String[] args) {
// 컬렉션
// List류 = 위치파악
// ArrayList 배열리스트
// 데이터의 잦은 이동, 추가 or 삭제 등에 불리하지만, 인덱싱 방식을 사용하고 있어, 검색(탐색)에 유리
// LinkedList 연결리스트
// 노드를 사용하고 있어, 검색에 불리하지만, 테이터의 추가 or 삭제에 유리
// 노드(node) = [데이터부][저장(주소)부]
LinkedList ll = new LinkedList(); // 크기를 미리 정해놓을수 없음
// 다양한 데이터의 추가, 삭제가 가능하다.
// ==========================================================================
// 스택 vs 큐 => 위치관련 X 저장관련 O
// Stack
// : FILO == 선입후출
// == : LIFO == 후입선출
// 입구가 1개뿐인 선형구조
// ex) 실행취소 (ctrl + z), 뒤로가기, 최근 방문한 페이지
Stack s = new Stack();
System.out.println(s); // toString
s.push(10);
s.push(20);
s.push(30);
System.out.println(s);
System.out.println(s.peek() + " : 삭제를 동반 안한 출력 == peek()"); // 삭제를 동반 안한 출력
System.out.println(s);
System.out.println(s.pop() + " : 삭제를 동반 한 출력 == pop()"); // 삭제를 동반한 출력
System.out.println(s);
System.out.println("----------------------------------------------\n");
// Queue
// : FIFO == 선입선출
// == LILO == 후입후출
// 입구와 출구가 정해진 선형구조
// ex) 대기열, 수강신청, 티켓팅
// 큐라는 구조의 기반을 LinkedList로 구현 하고있음
Queue q = new LinkedList(); // 기반이 LinkedList이기 때문에 new LinkedList로 써야함
q.offer(40);
q.offer(50);
q.offer(60);
System.out.println(q);
System.out.println(q.peek() + " : 삭제를 동반 안한 출력 == peek()"); // 삭제를 동반 안한 출력
System.out.println(q);
System.out.println(q.poll() + " : 삭제를 동반한 출력 == pull()"); // 삭제를 동반한 출력
System.out.println(q);
}
}