Search code examples
javacollectionsqueueguavaunique-constraint

A Queue that ensure uniqueness of the elements?


I'm looking for a implementation of java.util.Queue or something in the Google collection who behave like a Queue, but also ensure that each element of the queue is unique. (all further insertion will have no effect)

It's that possible, or will I have to do it by hand?

For now I'm using a Queue, with a LinkedList implementation, and I check the uniqueness before insertion. ( I use a side Map for doing this, add / remove element from the side map before / after the queu ). I don't like it too much.

Any input is welcome. If it's not in the java.util package, then maybe it's a bad idea?


Solution

  • How about a LinkedHashSet? Its iterator preserves insertion order, but because it's a Set, its elements are unique.

    As its documentation says,

    Note that insertion order is not affected if an element is re-inserted into the set.

    In order to efficiently remove elements from the head of this "queue", go through its iterator:

    Iterator<?> i = queue.iterator();
    ...
    Object next = i.next();
    i.remove();