Class SelectableConcurrentHashMap


  • public class SelectableConcurrentHashMap
    extends java.lang.Object
    SelectableConcurrentHashMap subclasses a repackaged version of ConcurrentHashMap ito allow efficient random sampling of the map values.

    The random sampling technique involves randomly selecting a map Segment, and then selecting a number of random entry chains from that segment.

    Author:
    Chris Dennis
    • Constructor Detail

      • SelectableConcurrentHashMap

        public SelectableConcurrentHashMap​(PoolAccessor poolAccessor,
                                           int concurrency,
                                           long maximumSize,
                                           RegisteredEventListeners cacheEventNotificationService)
      • SelectableConcurrentHashMap

        public SelectableConcurrentHashMap​(PoolAccessor poolAccessor,
                                           int initialCapacity,
                                           float loadFactor,
                                           int concurrency,
                                           long maximumSize,
                                           RegisteredEventListeners cacheEventNotificationService)
    • Method Detail

      • setMaxSize

        public void setMaxSize​(long maxSize)
      • getRandomValues

        public Element[] getRandomValues​(int size,
                                         java.lang.Object keyHint)
      • storedObject

        public java.lang.Object storedObject​(Element e)
        Return an object of the kind which will be stored when the element is going to be inserted
        Parameters:
        e - the element
        Returns:
        an object looking-alike the stored one
      • quickSize

        public int quickSize()
        Returns the number of key-value mappings in this map without locking anything. This may not give the exact element count as locking is avoided. If the map contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.
        Returns:
        the number of key-value mappings in this map
      • isEmpty

        public boolean isEmpty()
      • size

        public int size()
      • lockFor

        public java.util.concurrent.locks.ReentrantReadWriteLock lockFor​(java.lang.Object key)
      • locks

        public java.util.concurrent.locks.ReentrantReadWriteLock[] locks()
      • get

        public Element get​(java.lang.Object key)
      • containsKey

        public boolean containsKey​(java.lang.Object key)
      • containsValue

        public boolean containsValue​(java.lang.Object value)
      • put

        public Element put​(java.lang.Object key,
                           Element element,
                           long sizeOf)
      • putIfAbsent

        public Element putIfAbsent​(java.lang.Object key,
                                   Element element,
                                   long sizeOf)
      • remove

        public Element remove​(java.lang.Object key)
      • remove

        public boolean remove​(java.lang.Object key,
                              java.lang.Object value)
      • clear

        public void clear()
      • keySet

        public java.util.Set<java.lang.Object> keySet()
      • values

        public java.util.Collection<Element> values()
      • entrySet

        public java.util.Set<java.util.Map.Entry<java.lang.Object,​Element>> entrySet()
      • evict

        public boolean evict()
      • recalculateSize

        public void recalculateSize​(java.lang.Object key)
      • segmentFor

        protected final SelectableConcurrentHashMap.Segment segmentFor​(int hash)
        Returns the segment that should be used for key with given hash
        Parameters:
        hash - the hash code for the key
        Returns:
        the segment
      • hash

        protected static int hash​(int h)