자바에서는 Queue 는 인터페이스고 필요에 따라 큐 컬렉션을 골라 사용할 수 있다.
자주 사용하는 큐 컬렉션에는 LinkedList, ArrayDeque 가 있다. 코테에서는 주로 ArrayDeque사용
import java.util.Queue;
import java.util.ArrayDeque;
ArrayDeque<Integer> queue = new ArrayDeque<>();
메서드 | 설명 |
boolean add(Object o) | 지정된 객체를 Queue에 추가 저장공간 부족 시 IllegalStateException 발생 |
Object remove() | Queue에서 객체를 꺼내 반환 비어있을 경우 NoSuchElementException 발생 |
Object element() | 삭제없이 요소를 읽어온다. 비어있을 경우 NoSuchElementException 발생 |
boolean offer(Object o) | Queue에 객체를 저장 |
Object poll() | Queue에서 객체를 꺼내서 반환 비어있을 경우 null을 반환 |
Object peek() | 삭제없이 요소를 읽어온다. 비어있을 경우 null을 반환 |
덱을 큐처럼 활용하기
양 끝에서 삽입이나 삭제가 가능해서 큐를 구현할때는 덱을 사용하는 것도 좋다.
ArrayDeque<Integer> deq = new ArrayDeque<>();
// 데이터 추가
deq.addLast(1);
deq.addLast(2);
deq.addLast(3);
// 맨 앞 데이터를 제거하면서 반환
int first = deq.pollFirst();
System.out.println(first); // 1
// deq.addFrist(), deq.pollLast()
ArrayDeque에도 Queue와 동일한 역할을 하는 add() 메서드와 poll() 메서드가 있지만 addLast(), pollFirst() 메서드를 사용하는 이유는 직관적으로 이해할 수 있기 때문이다.
추가로 데이터를 addFirst() 로만 넣고, pollFirst() 로만 꺼내면 동작은 스택의 push(), pop()과 동일하므로 ArratDeque 하나면 스택, 큐, 덱을 전부 구현 가능
LinkedList
import java.util.Queue;
Queue<Integer> queue = new LinkedList<>();
메서드는 LinkedList 쓸때와 같다.
1. 삽입
q.add(삽입할 value);
ㄴ 반환 값(boolean): 삽입 성공 시 true / 실패 시 Exception발생
q.offer(삽입할 value);
ㄴ 반환 값(boolean): 삽입 성공 시 true / 실패 시 false 반환
2. 삭제
q.remove();
ㄴ 반환 값(삭제된 value의 자료형): 삭제된 value / 공백 큐이면 Exception("NoSuchElementException") 발생
q.remove(삭제할 value);
ㄴ 반환 값(boolean): 큐에 해당 value가 존재하면 해당 값 삭제 후 true / 존재하지 않으면 false 반환
q.poll();
ㄴ 반환 값(삭제된 value의 자료형): 삭제된 value / 공백 큐이면 null 반환
3. 큐의 front에 위치한 value 반환
q.element();
ㄴ 반환 값(큐 head에 위치한 value의 자료형): 큐 head에 위치한 value / 공백 큐이면 Exception("NoSuchElementException") 발생
q.peek();
ㄴ 반환 값(큐 head에 위치한 value의 자료형): 큐 head에 위치한 value / 공백 큐이면 null 반환
4. 큐 초기화(= 공백 큐 만들기)
q.clear();
ㄴ 반환 값(void): X
5. 큐 크기
q.size();
ㄴ 반환 값(int): 큐 사이즈 반환
6. 큐에 해당 원소가 존재하는지?
q.contains(찾을 value);
ㄴ 반환 값(boolean): 해당 값이 존재할 때 true / 해당 값이 없을 때 false 반환
7. 공백 큐인가?
q.isEmpty();
ㄴ 반환 값(boolean): 공백 큐이면 true / 공백 큐가 아니면 false 반환
'Develop > Ps' 카테고리의 다른 글
[JAVA] 코테 정리 (0) | 2024.07.15 |
---|---|
[Java] Stack 메서드 (0) | 2024.04.16 |
[Java] StringBuilder 메서드 (0) | 2024.04.15 |
[Java] String 메서드 (0) | 2024.04.15 |
[Java] Set 메서드 (0) | 2024.04.15 |
댓글