Class ReadOnlySegmentAwareCollection<E>

java.lang.Object
org.infinispan.commons.util.AbstractDelegatingCollection<E>
org.infinispan.distribution.util.ReadOnlySegmentAwareCollection<E>
All Implemented Interfaces:
Iterable<E>, Collection<E>
Direct Known Subclasses:
ReadOnlySegmentAwareEntryCollection

public class ReadOnlySegmentAwareCollection<E> extends org.infinispan.commons.util.AbstractDelegatingCollection<E>
Set implementation that shows a read only view of the provided set by only allowing entries that map to a given segment using the provided consistent hash.

This set is useful when you don't want to copy an entire set but only need to see values from the given segments.

Note many operations are not constant time when using this set. Please check the method you are using to see if it will perform differently than normally expected.

Since:
7.2
Author:
wburns
  • Field Details

    • set

      protected final Collection<E> set
    • topology

      protected final LocalizedCacheTopology topology
    • allowedSegments

      protected final org.infinispan.commons.util.IntSet allowedSegments
  • Constructor Details

    • ReadOnlySegmentAwareCollection

      public ReadOnlySegmentAwareCollection(Collection<E> set, LocalizedCacheTopology topology, org.infinispan.commons.util.IntSet allowedSegments)
  • Method Details

    • delegate

      protected Collection<E> delegate()
      Specified by:
      delegate in class org.infinispan.commons.util.AbstractDelegatingCollection<E>
    • valueAllowed

      protected boolean valueAllowed(Object obj)
    • contains

      public boolean contains(Object o)
      Specified by:
      contains in interface Collection<E>
      Overrides:
      contains in class org.infinispan.commons.util.AbstractDelegatingCollection<E>
    • containsAll

      public boolean containsAll(Collection<?> c)
      Specified by:
      containsAll in interface Collection<E>
      Overrides:
      containsAll in class org.infinispan.commons.util.AbstractDelegatingCollection<E>
    • isEmpty

      public boolean isEmpty()
      Checks if the provided set is empty. This is done by iterating over all of the values until it can find a key that maps to a given segment.

      This method should always be preferred over checking the size to see if it is empty.

      This time complexity for this method between O(1) to O(N).

      Specified by:
      isEmpty in interface Collection<E>
      Overrides:
      isEmpty in class org.infinispan.commons.util.AbstractDelegatingCollection<E>
    • size

      public int size()
      Returns the size of the read only set. This is done by iterating over all of the values counting all that are in the segments.

      If you are using this method to verify if the set is empty, you should instead use the isEmpty() as it will perform better if the size is only used for this purpose.

      This time complexity for this method is always O(N).

      Specified by:
      size in interface Collection<E>
      Overrides:
      size in class org.infinispan.commons.util.AbstractDelegatingCollection<E>
    • iterator

      public Iterator<E> iterator()
      Specified by:
      iterator in interface Collection<E>
      Specified by:
      iterator in interface Iterable<E>
      Overrides:
      iterator in class org.infinispan.commons.util.AbstractDelegatingCollection<E>