한모로그 2023. 2. 1. 21:27

후입선출과 선입선출

  • 후입선출(LIFO): 나중에 넣은 객체가 먼저 빠져나가는 구조
  • 선입선출(FIFO): 먼저 넣은 객체가 먼저 빠져나가는 구조
  • 컬렉션 프레임워크는 LIFO 자료구조를 제공하는 스택 클래스와 FIFO 자료구조를 제공하는 큐 인터페이스를 제공


    출처, 이것이 자바다


Stack

  • Stack 클래스: LIFO 자료구조를 구현한 클래스


    출처, 이것이 자바다



    출처, 이것이 자바다


package ch15.sec06.exam01;

public class Coin {
    private int value;

    public Coin(int value) {
        this.value = value;
    }


    //getter 메소드
    public int getValue() {
        return value;
    }
}

package ch15.sec06.exam01;

import java.util.Stack;

/*
 Stack 클래스 : Stack 자료구조를 설계한 클래스 
 */

public class StackExample {

    public static void main(String[] args) {

        Stack<Coin> coinBox = new Stack<Coin>();

        //동전넣기. 객체저장
        coinBox.push(new Coin(100));
        coinBox.push(new Coin(50));
        coinBox.push(new Coin(500));
        coinBox.push(new Coin(10));

        //동전을 하나씩 꺼내오기. 객체를 참조
        while(!coinBox.isEmpty()) {
            Coin coin = coinBox.pop();
            System.out.println("꺼내온 동전: " + coin.getValue() + "원");
        }
    }
}

Queue

  • Queue 인터페이스: FIFO 자료구조에서 사용되는 메소드를 정의
  • LinkedList: Queue 인터페이스를 구현한 대표적인 클래스


    출처, 이것이 자바다



    출처, 이것이 자바다


package ch15.sec06.exam02;

public class Message {
    public String command;
    public String to;

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

package ch15.sec06.exam02;

/*
 Queue 인터페이스 : FIFO 구조.(First Input First Output)
 */

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {

    public static void main(String[] args) {
        Queue<Message> messageQueue = new LinkedList<Message>();

        //메세지 넣기
        messageQueue.offer(new Message("sendMail", "홍길동"));
        messageQueue.offer(new Message("sendSMS", "신용권"));
        messageQueue.offer(new Message("sendKakaotalk", "이순신"));

        //메세지를 하나씩 꺼내어 처리
        while(!messageQueue.isEmpty()) {
            Message message = messageQueue.poll();
            switch (message.command) {
            case "sendMail":
                System.out.println(message.to + ": 님에게 메일을 보냅니다.");
                break;
            case "sendSMS":
                System.out.println(message.to + ": 님에게 SMS를 보냅니다.");
                break;
            case "sendKakaotalk":
                System.out.println(message.to + ": 님에게 카카오톡을 보냅니다.");
                break;
            }
        }
    }
}