Class 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 Detail

      • allowedSegments

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

      • ReadOnlySegmentAwareCollection

        public ReadOnlySegmentAwareCollection​(Collection<E> set,
                                              ConsistentHash ch,
                                              org.infinispan.commons.util.IntSet allowedSegments)
    • Method Detail

      • 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>