Class AbstractReferenceMap.ReferenceEntry<K,​V>

  • All Implemented Interfaces:
    java.util.Map.Entry<K,​V>, KeyValue<K,​V>
    Enclosing class:
    AbstractReferenceMap<K,​V>

    protected static class AbstractReferenceMap.ReferenceEntry<K,​V>
    extends AbstractHashedMap.HashEntry<K,​V>
    A MapEntry implementation for the map.

    If getKey() or getValue() returns null, it means the mapping is stale and should be removed.

    Since:
    3.1
    • Constructor Detail

      • ReferenceEntry

        public ReferenceEntry​(AbstractReferenceMap<K,​V> parent,
                              AbstractHashedMap.HashEntry<K,​V> next,
                              int hashCode,
                              K key,
                              V value)
        Creates a new entry object for the ReferenceMap.
        Parameters:
        parent - the parent map
        next - the next entry in the hash bucket
        hashCode - the hash code of the key
        key - the key
        value - the value
    • Method Detail

      • getKey

        public K getKey()
        Gets the key from the entry. This method dereferences weak and soft keys and thus may return null.
        Specified by:
        getKey in interface KeyValue<K,​V>
        Specified by:
        getKey in interface java.util.Map.Entry<K,​V>
        Overrides:
        getKey in class AbstractHashedMap.HashEntry<K,​V>
        Returns:
        the key, which may be null if it was garbage collected
      • getValue

        public V getValue()
        Gets the value from the entry. This method dereferences weak and soft value and thus may return null.
        Specified by:
        getValue in interface KeyValue<K,​V>
        Specified by:
        getValue in interface java.util.Map.Entry<K,​V>
        Overrides:
        getValue in class AbstractHashedMap.HashEntry<K,​V>
        Returns:
        the value, which may be null if it was garbage collected
      • setValue

        public V setValue​(V obj)
        Sets the value of the entry.
        Specified by:
        setValue in interface java.util.Map.Entry<K,​V>
        Overrides:
        setValue in class AbstractHashedMap.HashEntry<K,​V>
        Parameters:
        obj - the object to store
        Returns:
        the previous value
      • equals

        public boolean equals​(java.lang.Object obj)
        Compares this map entry to another.

        This implementation uses isEqualKey and isEqualValue on the main map for comparison.

        Specified by:
        equals in interface java.util.Map.Entry<K,​V>
        Overrides:
        equals in class AbstractHashedMap.HashEntry<K,​V>
        Parameters:
        obj - the other map entry to compare to
        Returns:
        true if equal, false if not
      • hashCode

        public int hashCode()
        Gets the hashcode of the entry using temporary hard references.

        This implementation uses hashEntry on the main map.

        Specified by:
        hashCode in interface java.util.Map.Entry<K,​V>
        Overrides:
        hashCode in class AbstractHashedMap.HashEntry<K,​V>
        Returns:
        the hashcode of the entry
      • toReference

        protected <T> java.lang.Object toReference​(AbstractReferenceMap.ReferenceStrength type,
                                                   T referent,
                                                   int hash)
        Constructs a reference of the given type to the given referent. The reference is registered with the queue for later purging.
        Type Parameters:
        T - the type of the referenced object
        Parameters:
        type - HARD, SOFT or WEAK
        referent - the object to refer to
        hash - the hash code of the key of the mapping; this number might be different from referent.hashCode() if the referent represents a value and not a key
        Returns:
        the reference to the object
      • onPurge

        protected void onPurge()
        This is the callback for custom "after purge" logic
      • purge

        protected boolean purge​(java.lang.ref.Reference<?> ref)
        Purges the specified reference
        Parameters:
        ref - the reference to purge
        Returns:
        true or false
      • nullValue

        protected void nullValue()
        This method can be overriden to provide custom logic to purge value