# [Java] Collection Framework - Queue Interface
Study Repository

[Java] Collection Framework - Queue Interface

by rlaehddnd0422

Queue Interface

  • ์ฒ˜์Œ ๋“ค์–ด์˜จ ์›์†Œ(๊ฐ์ฒด)๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” First-In First-Out (FIFO) ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

  • LinkedList๊ฐ€ ์—ฌ๊ธฐ์„œ ๋˜ ํ•œ๋ฒˆ ๋‚˜์˜ค๋Š”๋ฐ LinkedList๋Š” List ์ธํ„ฐํŽ˜์ด์Šค์™€ Queue๋ฅผ ์ƒ์†ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ธ Deque๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

Queue

PriorityQueue Class

์šฐ์„ ์ˆœ์œ„ ํ

  • ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋“ค์–ด๊ฐ„ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์šฐ์„ ์ˆœ์œ„ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ํ์ž…๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์ธ ํ์™€ ๋‹ค๋ฅด๊ฒŒ, ์›์†Œ(๊ฐ์ฒด)์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๊ณ  ๊บผ๋ƒ…๋‹ˆ๋‹ค.
  • ์ˆ˜ํ–‰ํ•  ์ž‘์—…์ด ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๊ณ  ์‹œ๊ฐ„์ด ์ œํ•œ๋˜์–ด ์žˆ์„ ๋•Œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋กœ ์ฃผ๋กœ ๋„คํŠธ์›Œํฌ ์ œ์–ด๋‚˜, ์ž‘์—… ์Šค์ผ€์ฅด๋ง์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ณต์‹๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ํ•„๋“œ์— Comparator ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ ์šฐ์„ ์ˆœ์œ„ ํ์— ๊ฐ์ฒด๋ฅผ ๋„ฃ๊ธฐ ์œ„ํ•ด์„œ ๋จผ์ €, ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ์ฒด์— ์ด Comparable ์ธํ„ฐํŽ˜์ด์Šค compareTo() ๋ฉ”์†Œ๋“œ๋กœ ๋กœ์ง์— ๋”ฐ๋ผ ์ž๋ฃŒ ๊ฐ์ฒด์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

  • ๊ฐ์ฒด์ด๋ฏ€๋กœ null๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์šฐ์„ ์ˆœ์œ„ ํ์—๋Š” null์„ ์ €์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ €์žฅ ๊ณต๊ฐ„์œผ๋กœ Array๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ ์š”์†Œ(๊ฐ์ฒด)๋ฅผ ํž™ ํ˜•ํƒœ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ์ด์ง„ ํŠธ๋ฆฌ์˜ ํ•œ ์ข…๋ฅ˜์ธ ํž™์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ๊ฐ€์žฅ ํฐ ๊ฐ’์ด๋‚˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
public class Student implements Comparable<Student> {

    private String name;
    private int priority;

    public Student(String name, int priority) {
        this.name = name;
        this.priority = priority;
    }

    @Override
    public int compareTo(Student o) {
        // ์šฐ์„ ์ˆœ์œ„ ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ๊ฒƒ๋ถ€ํ„ฐ ๋ฝ‘๊ธฐ
        if (this.priority < o.priority) { 
            return -1;
        } else if (this.priority == o.priority) { 
            return 0;
        }
        return 1;
    }
}
  • ์šฐ์„ ์ˆœ์œ„ ํ์— ๊ฐ์ฒด๋ฅผ ๋„ฃ๊ธฐ ์ „, ๋„ฃ์„ ๊ฐ์ฒด์˜ ํด๋ž˜์Šค์— Comparable ์ธํ„ฐํŽ˜์ด์Šค์˜ compareTo() ๋ฉ”์†Œ๋“œ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•ด์ค๋‹ˆ๋‹ค.
public class Main {
    public static void main(String[] args) {
        Queue<Student> pq = new PriorityQueue<>();

        pq.add(new Student("kim", 1));
        pq.add(new Student("park", 4));
        pq.add(new Student("choi", 2));
        pq.add(new Student("na", 3));

        System.out.println(pq);

        // ์ฐจ๋ก€๋Œ€๋กœ ๊บผ๋‚ด๊ธฐ poll
        System.out.println(pq.poll().getName());
        System.out.println(pq.poll().getName());
        System.out.println(pq.poll().getName());
        System.out.println(pq.poll().getName());
    }
}

Deque Interface (extends Queue)

  • Deque(Double-Ended Queue, ์ž…๊ตฌ๊ฐ€ ์–‘์ชฝ์œผ๋กœ ์—ด๋ ค์žˆ๋Š” ํ ํ˜•ํƒœ)๋Š” ์–‘์ชฝ์œผ๋กœ ๋„ฃ๊ณ  ๋นผ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ํ์ž…๋‹ˆ๋‹ค.
  • ์Šคํƒ + ํ๋กœ ์Šคํƒ์œผ๋กœ ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ํ๋กœ ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 
  • LinkedList์™€, ArrayDeque๊ฐ€ ์ด Deque ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋กœ, Deque๋Š” Queue๋ฅผ ์ƒ์†๋ฐ›์€ ์ธํ„ฐํŽ˜์ด์Šค

ArrayDeque Class 

  • Stack์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Stack ํด๋ž˜์Šค๋ณด๋‹ค ๋น ๋ฅธ ์†๋„๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ์–ด๋ ˆ์ด๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ LinkedList๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ปฌ๋ ‰์…˜์— null ์ €์žฅ์ด ๋ถˆ๊ฐ€๋Šฅ.
public class ArrayDequeTest {
    public static void main(String[] args) {
        Deque<String> adq = new ArrayDeque<>();
        adq.offerLast("KIM"); // [KIM]
        adq.offerFirst("PARK"); // [PARK, KIM]
        adq.offerFirst("CHOI"); // [CHOI, PARK, KIM]
        adq.offerLast("NA"); // [CHOI, PARK, KIM, NA]

        System.out.println(adq.pollFirst()); // CHOI <- [ PARK, KIM, NA ]
        System.out.println(adq.pollLast()); // NA <- [ PARK, KIM ]
    }
}
  • offerLast()๋กœ Array์˜ ๋’ค์— ์š”์†Œ๋ฅผ ์ฑ„์šธ ์ˆ˜ ์žˆ๊ณ , offerFirst()๋กœ Array์˜ ์•ž์— ์š”์†Œ๋ฅผ ์ฑ„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • pollLast()๋กœ Array์˜ ๋’ค์— ์š”์†Œ๋ฅผ ๋บ„ ์ˆ˜ ์žˆ๊ณ , pollFirst()๋กœ Array์˜ ์•ž์— ์š”์†Œ๋ฅผ ์ฑ„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

LinkedList Class

  • LinkedList ๋˜ํ•œ Deque๋ฅผ ์ƒ์†๋ฐ›์•„ ์Šคํƒ, ํ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ~First(), ~Last() ๋ฉ”์†Œ๋“œ๋Š” Deque์— ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ Deque๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
public class LinkedListTest {
    public static void main(String[] args) {
        Deque<String> ll = new LinkedList<>();
        ll.offer("Hello");
        ll.offer("World");
        ll.offerFirst("HI");
        System.out.println(ll.pollFirst());
    }
}

<์ฐธ๊ณ  ์ž๋ฃŒ>

 

 

๐Ÿงฑ Java Collections Framework ์ข…๋ฅ˜ ๐Ÿ’ฏ ์ด์ •๋ฆฌ

Java Collection Framework ์ž๋ฐ” ์ƒˆ๋‚ด๊ธฐ๋ถ„๋“ค์€ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๋Š” ๋‹จ์–ด์— ๋ญ”๊ฐ€ ๊ฑฐ์ฐฝํ•˜๊ณ  ์–ด๋ ค์šด ๋Š๋‚Œ์ด ๋“ค์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ๊ทธ๋ƒฅ ์ž๋ฃŒ ๊ตฌ์กฐ(Data Structure) ์ข…๋ฅ˜์˜ ํ˜•ํƒœ๋“ค์„ ์ž๋ฐ” ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•œ ๋ชจ์Œ์ง‘

inpa.tistory.com

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ