38

The Queue implementation in Java has two methods to remove element, One is remove() which throws exception and other one is poll() which returns null for an empty queue. I have two doubts:

  1. Why Queue has different implementation to remove element?
  2. Which implementation to use When?

7 Answers 7

34

In some situations it's expected that a queue will be empty, and in those cases having a method that doesn't throw an exception is appropriate. In other situations it's an exceptional circumstance that the queue is empty, and an exception is appropriate.

Throwing exceptions incurs a performance penalty, and if it's the case that you expect the queue to be empty from time to time you don't want to have to handle the queue-empty-logic as catching an exception -- it's both costly and difficult to read.

In the opposite case where you don't expect the queue to ever be empty it is a sign of a programming error, or some other exceptional circumstance that it is, and you don't want to write ugly error condition checking code (e.g. checking for null), because in this case that would be less readable than catching an exception (which you can do in another scope).

Sign up to request clarification or add additional context in comments.

3 Comments

This answer explains the basic difference,just fails to tell,which throws the exception,and which doesn't.
add() and remove() throws an Exception, while offer() and poll() does not.
Naming things is hard, but it seems to me that much confusion could have been avoided if poll were named removeOrNull, removeIfPresent, or something along those lines. I don't think this question would exist if that were the case.
18

The abstract class AbstractQueue<E> implements Queue<E> and define the remove method.

You can take a look at source code:

public E remove() {
    E x = poll();
    if (x != null)
        return x;
    else
        throw new NoSuchElementException();
}

So, as you can see, the remove() method use poll() method.

You can use which one you prefer.

2 Comments

I am using this poll() call for my queue implementation. And surprisingly, it throws NoSuchElementException. Any explanations? -.-
Maybe you access the queue concurrently?
6

Remove() method differs from poll only in that it throws an exception if this queue is empty.

enter image description here

1 Comment

It's better that you pass this as text use the > to quote
5

Looking at the answers, it wasn't clear to me which did what,hence:

Straight from the API : The remove() and poll() methods differ only in their behavior when the queue is empty: the remove() method throws an exception, while the poll() method returns null

Comments

4

When you know how to react right now and/or expect elements to be absent then use poll.

Otherwise use remove.

Comments

1

Sometimes you want a null value returned for an empty queue and sometimes you want it to treat an empty queue as a exception case.

Comments

0

The two methods are used differently in classic discussions about a Queue structure. I use poll() mostly to retrieve items, and remove() mostly if I need to modify the Queue outside of the normal loop.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.