본문 바로가기

[TIL] 컬렉션 - java.util.Queue<E> 인터페이스 & 구현클래스

인포꿀팁 발행일 : 2020-09-08

java.util.Queue<E> 란?

  • Queue란 선입선출 (FIFO : First In First Out) 구조로 먼저 입력된 자료를 출력하는 구조를 의미한다.
  • 중복적인 요소를 저장 가능하다.
  • 구현 클래스 : LinkedList, PriorityQueue

 

Queue 객체 생성방법은

먼저 Queue<String> que = new LinkedList<>();

 

주요 메소드

boolean add(E e) 지정된 요소를 큐의 마지막에 삽입
boolean offer(E e) 지정된 요소를 큐의 마지막에 삽입한다
E element() 큐의 head요소를 반환하며 삭제하지는 않는다.
E peek() 큐의 head요소를 반환하며 삭제하지는 않으며 큐가 empty이면 null을 반환
E poll() 큐의 head 요소를 반환하고 삭제하며 큐가 empty이면 null을 반환
E remove() 큐의 head 요소를 리턴하고 삭제한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package ex0814;
 
import java.util.LinkedList;
import java.util.Queue;
 
public class Queue_Ex1 {
    public static void main(String[] args) {
        //QUEUE : FIFO
        Queue<String> q = new LinkedList<>();
        q.offer("머리");
        q.offer("가슴");
        q.offer("다리");
        q.offer("발");
        
        String s;
        while(q.peek() !=null) {
            s=q.poll();
            System.out.println(s);
        }
//        peek : 큐 헤드 요소를 반환하고 삭제 안함. 없으면 null
//        poll : 큐 헤드 요소를 반환하고 삭제. 없으면 .null
    }
}
// 출력값
머리
가슴
다리


cs

 

java.util.PriorityQueue<E> 

일반적인 큐는 FIFO구조이다. 하지만 우선순위 큐는 우선순위를 결저아형 들어온 순서와는 상관없이 우선순위가 높은 순대로 먼저 출력하는 큐이다.

PriorityQueue는 Comparable 인터페이스를 구현하는 클래스의 요소를 저장하는데 Comparable 인터페이스가 큐 내에서 순서를 결정한다.  다른 방법은 생성자에 Comparator를 전달하는 방법도 있다.

 

그 예시이다.

comparable 클래스를 구현하여 compareTo 메소드를 재정의하여 이름순으로 출력하게끔 만들었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package ex0814;
 
import java.util.PriorityQueue;
 
public class Queue_Ex2 {
    public static void main(String[] args) {
        //PriorityQueue : 우선순위 큐
        //comparable 인터페이스 구현 클래스만 가능
        PriorityQueue<User11> q = new PriorityQueue<>();
        q.offer(new User11("영헌",27));
        q.offer(new User11("지영",26));
        q.offer(new User11("유리",25));
        q.offer(new User11("지원",24));
        
        while(q.peek()!=null) {
            User11 u =q.poll();
            System.out.println(u.getName()+":"+u.getAge());
        }
    }
}
class User11 implements Comparable<User11>{
    private String name;
    private int age;
    public User11() {}
    public User11(String name, int age) {
        this.name =name;
        this.age=age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public int compareTo(User11 o) {
        return name.compareTo(o.getName());
    }
}
//출력 값
영헌:27
유리:25
지영:26
지원:24

 
cs

 

댓글