후입선출(LIFO : Last In First Out)은 나중에 넣은 객체가 먼저 빠져나가는 자료구조를 말한다
선입선출(FIFO: Firest In First Out)은 먼저 넣은 객체가 먼저 빠져나가는 구조를 말한다.
컬렉션 프레임워크에는 LIFO 자료구조를 제공하는 스택(Stack) 클래스와 FIFO자료 구조를 제공하는 큐(Queue) 인터페이스를 제공한다
스택(Stack)을 응용한 대표적인 예가 JVM 스택 메모리이다
스택 메모리에 저장된 변수는 나중에 저장된 것부터 제거 된다.
큐(Queue)를 응용한 대표적인 예가 스레드풀(ExecutorService)의 작업 큐이다.
작업 큐는 먼저 들어온 작업부터 처리한다.
Stack
Stack 클래스는 LIFO 자료구조를 클래스이다.
Stack 객체를 생성하기 위해서는 저장할 객체 타입을 파라미터로 표기하고 기본 생성자를 호출하면 된다
Stack<E> stack = new Stack<E>();
동전케이스는 위에만 오픈되어 있는 스택 구조를 가지고 있다,
먼저 넣은 동전은 제일 밑에 까리고 나중에 넣은 동전이 위에 쌓이기 때문에 Stack 에서 동전을 빼면 마지막에 넣은 동전이 먼저 나온다
package CollectionFrameWork;
public class Coin {
private int value;
public Coin(int value){
this.value = value;
}
public int getValue(){
return value;
}
}
===================
package CollectionFrameWork;
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<Coin> coinBox = new Stack<>();
coinBox.push(new Coin(1));
coinBox.push(new Coin(2));
coinBox.push(new Coin(3));
while (!coinBox.isEmpty()) {
System.out.println(coinBox.pop());
}
}
}
Queue
Queue 인터페이스는 FIFO 자료구조에서 사용되는 메소드를 정의하고 있다.
Queue 인터페이스를 구현한 대표적인 클래스는 LinkedList 이다
LinkedList는 List 인터페이스를 구현 했기 때문에 List 컬렉션이기도 하다
Queue<E> queue = new LinkedList<E>();
package CollectionFrameWork;
public class Message {
public String coomand;
public String to;
public Message(String coomand, String to) {
this.coomand = coomand;
this.to = to;
}
}
===================================================
package CollectionFrameWork;
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<Message> messagesQueue = new LinkedList<>();
messagesQueue.offer(new Message("sendMail", "홍길동"));
messagesQueue.offer(new Message("sendSMS", "신억"));
messagesQueue.offer(new Message("sendKatok", "제이슨"));
while (!messagesQueue.isEmpty()) {
Message message = messagesQueue.poll();
switch (message.coomand) {
case "sendMail":
System.out.println(message.to + "메일을 보내여");
break;
case "sendSMS":
System.out.println(message.to + "문자를 보내여");
break;
case "sendKatok":
System.out.println(message.to + " 카톡을 보내여");
break;
}
}
}
}
'Back-end > 이것이 자바다[신용권 한빛미디어]' 카테고리의 다른 글
병렬 처리를 위한 컬렉션 (0) | 2022.05.21 |
---|---|
동기화된 컬렉션 (0) | 2022.05.21 |
검색 기능을 강화 시킨 컬렉션 (0) | 2022.05.15 |
Map 컬렉션 (0) | 2022.05.15 |
Set 컬렉션 (0) | 2022.05.01 |