Class ReadOnlySegmentAwareCollection<E>

  • All Implemented Interfaces:
    java.lang.Iterable<E>, java.util.Collection<E>
    Direct Known Subclasses:
    ReadOnlySegmentAwareEntryCollection

    public class ReadOnlySegmentAwareCollection<E>
    extends 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

      • set

        protected final java.util.Collection<E> set
      • allowedSegments

        protected final IntSet allowedSegments
    • Constructor Detail

      • ReadOnlySegmentAwareCollection

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

      • valueAllowed

        protected boolean valueAllowed​(java.lang.Object obj)
      • 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 java.util.Collection<E>
        Overrides:
        isEmpty in class 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 java.util.Collection<E>
        Overrides:
        size in class AbstractDelegatingCollection<E>
      • iterator

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