Class EvictingQueue<E>

  • All Implemented Interfaces:
    Serializable, Iterable<E>, Collection<E>, Queue<E>

    @Beta
    @GwtCompatible
    public final class EvictingQueue<E>
    extends ForwardingQueue<E>
    implements Serializable
    A non-blocking queue which automatically evicts elements from the head of the queue when attempting to add new elements onto the queue and it is full. This queue orders elements FIFO (first-in-first-out). This data structure is logically equivalent to a circular buffer (i.e., cyclic buffer or ring buffer).

    An evicting queue must be configured with a maximum size. Each time an element is added to a full queue, the queue automatically removes its head element. This is different from conventional bounded queues, which either block or reject new elements when full.

    This class is not thread-safe, and does not accept null elements.

    Since:
    15.0
    Author:
    Kurt Alfred Kluever
    See Also:
    Serialized Form
    • Method Detail

      • create

        public static <E> EvictingQueue<E> create​(int maxSize)
        Creates and returns a new evicting queue that will hold up to maxSize elements.

        When maxSize is zero, elements will be evicted immediately after being added to the queue.

      • remainingCapacity

        public int remainingCapacity()
        Returns the number of additional elements that this queue can accept without evicting; zero if the queue is currently full.
        Since:
        16.0
      • delegate

        protected Queue<Edelegate()
        Description copied from class: ForwardingObject
        Returns the backing delegate instance that methods are forwarded to. Abstract subclasses generally override this method with an abstract method that has a more specific return type, such as ForwardingSet.delegate(). Concrete subclasses override this method to supply the instance being decorated.
        Specified by:
        delegate in class ForwardingQueue<E>
      • offer

        @CanIgnoreReturnValue
        public boolean offer​(E e)
        Adds the given element to this queue. If the queue is currently full, the element at the head of the queue is evicted to make room.
        Specified by:
        offer in interface Queue<E>
        Overrides:
        offer in class ForwardingQueue<E>
        Parameters:
        e - the element to add
        Returns:
        true always
      • add

        @CanIgnoreReturnValue
        public boolean add​(E e)
        Adds the given element to this queue. If the queue is currently full, the element at the head of the queue is evicted to make room.
        Specified by:
        add in interface Collection<E>
        Specified by:
        add in interface Queue<E>
        Overrides:
        add in class ForwardingCollection<E>
        Parameters:
        e - element whose presence in this collection is to be ensured
        Returns:
        true always
      • addAll

        @CanIgnoreReturnValue
        public boolean addAll​(Collection<? extends E> collection)
        Description copied from interface: java.util.Collection
        Adds all of the elements in the specified collection to this collection (optional operation). The behavior of this operation is undefined if the specified collection is modified while the operation is in progress. (This implies that the behavior of this call is undefined if the specified collection is this collection, and this collection is nonempty.)
        Specified by:
        addAll in interface Collection<E>
        Overrides:
        addAll in class ForwardingCollection<E>
        Parameters:
        collection - collection containing elements to be added to this collection
        Returns:
        true if this collection changed as a result of the call
        See Also:
        Collection.add(Object)
      • contains

        public boolean contains​(Object object)
        Description copied from interface: java.util.Collection
        Returns true if this collection contains the specified element. More formally, returns true if and only if this collection contains at least one element e such that Objects.equals(o, e).
        Specified by:
        contains in interface Collection<E>
        Overrides:
        contains in class ForwardingCollection<E>
        Parameters:
        object - element whose presence in this collection is to be tested
        Returns:
        true if this collection contains the specified element
      • remove

        @CanIgnoreReturnValue
        public boolean remove​(Object object)
        Description copied from interface: java.util.Collection
        Removes a single instance of the specified element from this collection, if it is present (optional operation). More formally, removes an element e such that Objects.equals(o, e), if this collection contains one or more such elements. Returns true if this collection contained the specified element (or equivalently, if this collection changed as a result of the call).
        Specified by:
        remove in interface Collection<E>
        Overrides:
        remove in class ForwardingCollection<E>
        Parameters:
        object - element to be removed from this collection, if present
        Returns:
        true if an element was removed as a result of this call