[Java] Collection Framework - Queue Interface
by rlaehddnd0422Queue Interface
- ์ฒ์ ๋ค์ด์จ ์์(๊ฐ์ฒด)๊ฐ ๋จผ์ ๋๊ฐ๋ First-In First-Out (FIFO) ๊ตฌ์กฐ์ ๋๋ค.
- LinkedList๊ฐ ์ฌ๊ธฐ์ ๋ ํ๋ฒ ๋์ค๋๋ฐ LinkedList๋ List ์ธํฐํ์ด์ค์ Queue๋ฅผ ์์ํ ์ธํฐํ์ด์ค์ธ Deque๋ฅผ ๊ตฌํํ ํด๋์ค์ ๋๋ค.
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());
}
}
<์ฐธ๊ณ ์๋ฃ>
'๐ Backend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422