본문 바로가기
  • Coding & Book
학습단/JAVA 학습단

20. 혼공자 20일차(선입선출 ,후입선출 컬렉션)

by 루이3 2023. 8. 10.

후입선출

  • 나중에 넣은 객체가 먼저 빠져나가는 자료구조를 뜻합니다.

 

선입선출

  • 먼저 넣은 객체가 먼저 빠져나가는 자료구조를 말합니다.

 

Stack

  • Stack 클래스는 LIFO 자료구조를 구현한 클래스입니다.
Stack<E> stack = new Stack<E>();

 

주요 메소드는 아래와 같습니다.

리턴 타입 메소드 설명
E push(E item) 주어진 객체를 스택에 넣습니다.
E peek() 스택의 맨위 객체를 가져오고 객체를 스택에서 제거하지 않습니다
E pop() 스택의 맨위 객체를 가져오고 객체를 스택에서 제거 합니다

 

 

예시) 동전케이스
(먼저 넣은 동전이 제일 밑에 나중에 넣은 동전이 위로 가므로 동전을 위에서 뺄경우 마지막에 넣은 동전이 나옵니다.)

 

StackExample.java

package sec17.exam01;
import java.util.*;

public class StackExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Stack<Coin> Box = new Stack<Coin>();
		
		Box.push(new Coin(1000));
		Box.push(new Coin(500));
		Box.push(new Coin(100));
		Box.push(new Coin(50));
		
		while(!Box.isEmpty()) {
			Coin coin = Box.pop();
			System.out.println("꺼낸 동전: " + coin.getValue());
		}

	}
}

Coin.java

package sec17.exam01;
import java.util.*;

public class StackExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Stack<Coin> Box = new Stack<Coin>();
		
		Box.push(new Coin(1000));
		Box.push(new Coin(500));
		Box.push(new Coin(100));
		Box.push(new Coin(50));
		
		while(!Box.isEmpty()) {
			Coin coin = Box.pop();
			System.out.println("꺼낸 동전: " + coin.getValue());
		}

	}
}

 

Queue

  • Queue 인터페이스는 FIFO 자료구조에서 사용되는 메소드를 정의하고 있습니다.
  • Queue 인터페이스를 구현한 대표적인 클래스는 LinkedList 입니다.
리턴 타입 메소드 설명
boolean offer(E e) 주어진 객체를 넣습니다.
E peek() 객체 하나를 가져오고 객체를 큐에서
제거하지 않습니다
E pool() 객체 하나를 가져오고 객체를 큐에서
제거 합니다

 

 

예시) Queue를 이용한 간단한 메시지 큐를 구현한 예제

 

QueueExample.java

package sec17.exam01;
import java.util.*;

public class QueueExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Queue<Message> messageQueue = new LinkedList<Message>();
		
		messageQueue.offer(new Message("sendMail", "Java"));
		messageQueue.offer(new Message("sendSMS", "C"));
		
		while(!messageQueue.isEmpty()) {
			Message message = messageQueue.poll();
			switch(message.command) {
				case "sendMail":
					System.out.println(message.to +" " + "sendMail");
					break;
				case "sendSMS":
					System.out.println(message.to +" " + "sendSMS");
					break;
			}
		}
	}

}

 

Message.java

package sec17.exam01;

public class Message {
	public String command;
	public String to;
	
	public Message(String command, String to) {
		this.command = command;
		this.to = to;
	}
}