Class AbstractReferenceMap.ReferenceEntry<K,​V>

  • All Implemented Interfaces:
    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 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 Map.Entry<K,​V>
        Overrides:
        getValue in class AbstractHashedMap.HashEntry<K,​V>
        Returns:
        the value, which may be null if it was garbage collected
      • equals

        public boolean equals​(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 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 Map.Entry<K,​V>
        Overrides:
        hashCode in class AbstractHashedMap.HashEntry<K,​V>
        Returns:
        the hashcode of the entry
      • toReference

        protected <T> 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