Class ReadOnlySegmentAwareMap<K,​V>

  • All Implemented Interfaces:
    java.util.Map<K,​V>

    public class ReadOnlySegmentAwareMap<K,​V>
    extends AbstractDelegatingMap<K,​V>
    Map implementation that shows a read only view of the provided entry by only allowing entries whose key maps to a given segment using the provided consistent hash.

    Any operation that would modify this map will throw an UnsupportedOperationException

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

    Note many operations are not constant time when using this map. The values() method is not supported as well. Please check\ the method you are using to see if it will perform differently than normally expected.

    Since:
    7.2
    Author:
    wburns
    • Field Detail

      • map

        protected final java.util.Map<K,​V> map
      • allowedSegments

        protected final IntSet allowedSegments
      • segmentAwareKeySet

        protected java.util.Set<K> segmentAwareKeySet
      • segmentAwareEntrySet

        protected java.util.Set<java.util.Map.Entry<K,​V>> segmentAwareEntrySet
    • Constructor Detail

      • ReadOnlySegmentAwareMap

        public ReadOnlySegmentAwareMap​(java.util.Map<K,​V> map,
                                       ConsistentHash ch,
                                       IntSet allowedSegments)
    • Method Detail

      • keyAllowed

        protected boolean keyAllowed​(java.lang.Object key)
      • containsKey

        public boolean containsKey​(java.lang.Object key)
        Specified by:
        containsKey in interface java.util.Map<K,​V>
        Overrides:
        containsKey in class AbstractDelegatingMap<K,​V>
      • containsValue

        public boolean containsValue​(java.lang.Object value)
        Specified by:
        containsValue in interface java.util.Map<K,​V>
        Overrides:
        containsValue in class AbstractDelegatingMap<K,​V>
      • get

        public V get​(java.lang.Object key)
        Specified by:
        get in interface java.util.Map<K,​V>
        Overrides:
        get in class AbstractDelegatingMap<K,​V>
      • entrySet

        public java.util.Set<java.util.Map.Entry<K,​V>> entrySet()
        Specified by:
        entrySet in interface java.util.Map<K,​V>
        Overrides:
        entrySet in class AbstractDelegatingMap<K,​V>
      • isEmpty

        public boolean isEmpty()
        Checks if the provided map is empty. This is done by iterating over all of the keys 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.Map<K,​V>
        Overrides:
        isEmpty in class AbstractDelegatingMap<K,​V>
      • keySet

        public java.util.Set<K> keySet()
        Specified by:
        keySet in interface java.util.Map<K,​V>
        Overrides:
        keySet in class AbstractDelegatingMap<K,​V>
      • size

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

        If you are using this method to verify if the map is empty, you should instead use the ReadOnlySegmentAwareEntryMap#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.Map<K,​V>
        Overrides:
        size in class AbstractDelegatingMap<K,​V>
      • values

        public java.util.Collection<V> values()
        NOTE: this method is not supported. Due to the nature of this map, we don't want to copy the underlying value collection. Thus almost any operation will require O(N) and therefore this method is not provided.
        Specified by:
        values in interface java.util.Map<K,​V>
        Overrides:
        values in class AbstractDelegatingMap<K,​V>
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object