Java/개념

Stack, Queue

spring_sunshine 2023. 9. 21. 01:48

Stack

  • 자바의 컬렉션 프레임워크에서 제공하는 LIFO(후입선출) 자료구조 클래스이다.
  • 자바에서 제공하는 Stack 클래스는 java.util.Vector<E> 클래스를 상속받았으므로, 해당하는 기능을 전부 쓸 수 있다.

 

다음은 Stack 클래스의 주요 메소드이다.

Stack 객체를 생성하려면 E 타입 파라미터 자리에 저장할 객체 타입을 표기하고, 기본 생성자를 호출하면 된다.

Stack<E> stack = new Stack<E>();
Stack<E> stack = new Stack<>(); // 타입파라미터 생략하면 왼쪽타입 따라감

 


Queue

  • 자바에서의 큐는 인터페이스로만 정의되어 있고, 별도로 클래스를 제공하지 않고 있다.
  • 따라서 Queue 클래스 인스턴스를 생성하기 위해선 Queue 인터페이스 구현체인 LinkedList() 생성자를 호출해준다.

다음은 Queue 인터페이스에 정의되어 있는 메소드이다.

LinkedList 객체를 다음과 같이 Queue 인터페이스 타입으로 변환하여 큐를 구현한다.

Queue<E> queue = new LinkedList<E>();
Queue<E> queue = new LinkedList<>();

 

 

 

다음은 Stack과 Queue를 같이 구현한 예제이다.

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

public class StackAndQueue{
	public static void main(String args[]){
    	Stack<String> stack = new Stack<>();
        stack.push("0");
        stack.push("1");
        stack.push("2");
    
    	Queue<String> queue = new LinkedList<>();
        queue.offer("0");
        queue.offer("1");
        queue.offer("2"); 
        /*
        queue.add("0");
        queue.add("1");
        queue.add("2");
        */
        
        System.out.println("**Stack**");
        while(!stack.isEmpty()){
        	System.out.println(stack.pop()); // 2 1 0
        }
        System.out.println("**Queue**");
        while(!queue.isEmpty()){
        	System.out.println(queue.poll()); // 0 1 2
        }
    }
}