Queue에서는 Enqueue, Dequeue와 같은 기본적인 같은 동작을 하는 메서드가 여러 개 있다. 그 대표적인 경우가 Poll()과 remove()이다.
Poll vs Remove
/**
* Retrieves and removes the head of this queue. This method differs
* from {@link #poll poll} only in that it throws an exception if this
* queue is empty.
*
* @return the head of this queue
* @throws NoSuchElementException if this queue is empty
*/
E remove();
/**
* Retrieves and removes the head of this queue,
* or returns {@code null} if this queue is empty.
*
* @return the head of this queue, or {@code null} if this queue is empty
*/
E poll();
위 코드라인은 Queue 인터페이스의 메소드에 대해 설명하고 있는 주석문이다. 이를 정리하자면,,,
- remove()
- queue의 head에 있는 값을 반환하고 이를 삭제한다.
- queue가 비어있을 때는 NoSuchElementException을 던진다.
- poll()
- queue의 head에 있는 값을 반환하고 이를 삭제한다.
- queue가 비어있을 때는 null을 반환한다.
즉 예외상황에 대한 처리 방식만 다를 뿐 똑같은 dequeue기능을 수행한다. 다른 경우도 확인해 보자.
add vs offer
/**
* Inserts the specified element into this queue if it is possible to do so
* immediately without violating capacity restrictions, returning
* {@code true} upon success and throwing an {@code IllegalStateException}
* if no space is currently available.
*
* @param e the element to add
* @return {@code true} (as specified by {@link Collection#add})
* @throws IllegalStateException if the element cannot be added at this
* time due to capacity restrictions
* @throws ClassCastException if the class of the specified element
* prevents it from being added to this queue
* @throws NullPointerException if the specified element is null and
* this queue does not permit null elements
* @throws IllegalArgumentException if some property of this element
* prevents it from being added to this queue
*/
boolean add(E e);
/**
* Inserts the specified element into this queue if it is possible to do
* so immediately without violating capacity restrictions.
* When using a capacity-restricted queue, this method is generally
* preferable to {@link #add}, which can fail to insert an element only
* by throwing an exception.
*
* @param e the element to add
* @return {@code true} if the element was added to this queue, else
* {@code false}
* @throws ClassCastException if the class of the specified element
* prevents it from being added to this queue
* @throws NullPointerException if the specified element is null and
* this queue does not permit null elements
* @throws IllegalArgumentException if some property of this element
* prevents it from being added to this queue
*/
boolean offer(E e);
- add()
- Queue의 rear에 값을 추가한다.
- 값이 정상적으로 추가되었다면 true를 반환한다.
- 큐의 용량 한계로 인해 값을 추가하지 못하는 상황에는 IllegalStateException 예외를 던진다.
- offer()
- Queue의 rear에 값을 추가한다.
- 값이 정상적으로 추가되었다면 true를 반환한다.
- 큐에 임의의 이유로 값이 정상적으로 추가되지 않은 상황에는 false를 반환한다.
element vs peek
/**
* Retrieves, but does not remove, the head of this queue. This method
* differs from {@link #peek peek} only in that it throws an exception
* if this queue is empty.
*
* @return the head of this queue
* @throws NoSuchElementException if this queue is empty
*/
E element();
/**
* Retrieves, but does not remove, the head of this queue,
* or returns {@code null} if this queue is empty.
*
* @return the head of this queue, or {@code null} if this queue is empty
*/
E peek();
- element()
- 큐의 head의 값을 반환한다. poll이나 remove와는 다르게 head를 지우지는 않는다.
- 큐가 비어있어 head가 가리키는 값이 없다면 NoSuchElementException 예외를 던진다.
- peek()
- 큐의 head의 값을 반환한다. poll이나 remove와는 다르게 head를 지우지는 않는다.
- 큐가 비어있어 head가 가리키는 값이 없다면 null을 반환한다.
'백엔드 개발자라면 대답해야 할 100가지 질문' 카테고리의 다른 글
13. Iterator의 자매품? Enumeration, ListIterator (0) | 2023.08.10 |
---|---|
12. Iterator란 무엇인가? (0) | 2023.08.08 |
10. HashMap과 TreeMap? HashMap과 Hashtable? (0) | 2023.08.04 |
9. Collection과 Collections의 차이점은 무엇인가요? (0) | 2023.08.02 |
8. 자바 컨테이너는 무엇을 의미하나요? (0) | 2023.08.01 |
댓글