관리 메뉴

100세까지 코딩

[자바 공부] 컬렉션(4) Stack & Queue 본문

JAVA

[자바 공부] 컬렉션(4) Stack & Queue

100세까지 코딩 2023. 9. 15. 00:01
Stack
  • 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out) 형식의 자료구조

주요 메서드
empty() 스택이 비어 있는지 검사
peek() 최상위 요소 반환 (제거 X)
pop() 최상위 요소 반환 (제거 O)
push() 요소 스택에 추가하고 그 요소 반환
search() 주어진 요소를 스택에서 찾음, 최상위 요소로부터 offset 값 반환
Stack 예시
import java.util.Stack;

public class StackStudy {
    public static void main(String[] args) {
        Stack st = new Stack();
        st.push("aaa");

        // peek 메서드 (제거 X)
        String s = (String) st.peek();
        if(st.empty()) {
            System.out.println(s+"가 peek된 후 스택이 비었습니다.");
        }

        // pop 메서드 (제거 O)
        s = (String) st.pop();
        if(st.empty()) {
            System.out.println(s+"가 pop된 후 스택이 비었습니다.");
        }

        st.push("bbb");
        st.push("ccc");
        System.out.println(st.search("bbb"));
    }
}

결과 :


Queue
  • 한쪽 끝에서는 삽입만, 다른 한쪽 끝에서는 삭제만 이루어지는  FIFO(First In First Out) 형식의 자료구조
  • Queue를 구현한 대표적인 클래스는 LinkedList와 PriorityQueue가 있다.
  • PriorityQueue는 요소의 순서(숫자 크기, 알파벳 순서 등)에 의해 처리한다.

주요 메서드
add() 큐에 요소 추가 (Collection 상속)
offer() 큐에 요소 추가 (Queue 상속)
clear() 모든 요소 제거
contains() 주어진 요소가 큐에 있는지 여부 확인
peek() 최우선순위 요소를 반환 (제거 X)
poll() 최우선순위 요소 반환 (제거 O)
remove() 주어진 요소 반환  or 매개변수를 입력하지 않을시, 큐의 첫번째 요소 반환 (제거 O)

   

PriorityQueue 예시

 - LinkedList는 List에서 설명했기에 생략한다.

import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Random;

public class QueueStudy {
    public static void main(String[] args) {
        Queue<Integer> integerPriorityQueue = new PriorityQueue<Integer>(5);
        Random rand = new Random();
        for(int i = 0; i < 5; i++) {
            integerPriorityQueue.add(rand.nextInt(100));
        }
        for(int i = 0; i < 5; i++) {
            Integer in = integerPriorityQueue.poll();
            System.out.println("Processing Integer : " + in);
        }

        Queue<String> stringPriorityQueue = new PriorityQueue<>(3);
        stringPriorityQueue.add("aaa");
        stringPriorityQueue.add("ccc");
        stringPriorityQueue.add("bbb");
        for (int i = 0; i < 3; i++) {
            String in = stringPriorityQueue.poll();
            System.out.println("Processing String : " + in);
        }
    }
}

결과 :

객체 우선순위 지정  

 -  PriorityQueue는 null 값이나 비교 불가능한 요소는 허용하지 않는다.

 - 따라서, 사용자 정의 클래스 객체들을 PriorityQueue에 넣을 땐, Comparable 인터페이스를 구현하여 순서를 정한다.

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

class Cat implements Comparable{
    int size;

    public Cat(int s){
        size = s;
    }

    public String toString(){
        return size + " ";
    }

    @Override
    public int compareTo(Object o) {
        return size - ((Cat) o).size;
    }
}

public class QueueStudy {
    public static void main(String[] args) {
        Queue<Cat> catPriorityQueue = new PriorityQueue<Cat>(3);
        catPriorityQueue.add(new Cat(5));
        catPriorityQueue.add(new Cat(3));
        catPriorityQueue.add(new Cat(7));

        System.out.println("Comparable 사용");
        System.out.println("크기 순");
        for(int i = 0; i < 3; i++) {
            Cat in = catPriorityQueue.poll();
            System.out.println("Processing Cat : " + in);
        }

        System.out.println();
        System.out.println("Comparator 사용");
        final Comparator<Cat> idComparator = new Comparator<Cat>(){
            public int compare(Cat c1, Cat c2) {
                return c2.size - c1.size;
            }
        };

        Queue<Cat> catPriorityQueue2 = new PriorityQueue<>(3,idComparator);
        catPriorityQueue2.add(new Cat(5));
        catPriorityQueue2.add(new Cat(3));
        catPriorityQueue2.add(new Cat(7));
        
        System.out.println("크기 역순");
        for(int i = 0; i < 3; i++) {
            Cat in = catPriorityQueue2.poll();
            System.out.println("Processing Cat : " + in);
        }
    }
}

결과 :

자바만 잡아도 - 김병만 참고 코드

스택과 큐는 필수.

'JAVA' 카테고리의 다른 글

[자바 공부] BufferedReader vs Scanner  (0) 2023.09.19
[자바 공부] 컬렉션(5) Map  (0) 2023.09.15
[자바 공부] 컬렉션(3) List  (0) 2023.09.14
[자바 공부] 컬렉션(2) Set  (0) 2023.09.12
[자바 공부] 컬렉션(1) Iterator  (0) 2023.09.12