org.eclipse.net4j.util.ref

## Class ReferenceValueMap2<K,V>

- java.lang.Object
- - java.util.AbstractMap<K,V>
  - - org.eclipse.net4j.util.ref.ReferenceValueMap2<K,V>

- All Implemented Interfaces:
    java.util.Map<K,V>
  Direct Known Subclasses:
    ReferenceValueMap, ReferenceValueMap2.Soft, ReferenceValueMap2.Strong, ReferenceValueMap2.Weak

      public abstract class ReferenceValueMap2<K,V>
      extends java.util.AbstractMap<K,V>

  A `Map` implementation that uses `KeyedReference` instances (`KeyedStrongReference`, `KeyedSoftReference`, `KeyedWeakReference` or `KeyedPhantomReference`) as its values.

  A `ReferenceValueMap` can be used to cache mappings until the value of the mapping is no longer reachable from outside of the map

  Note: This map is not synchronized. If it is to be used by multiple threads concurrently the user is responsible for applying proper external synchronization!

  Since:
    3.3
  Author:
    Eike Stepper

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `ReferenceValueMap2.Soft<K,V>`
    `static class` | `ReferenceValueMap2.Strong<K,V>`
    `static class` | `ReferenceValueMap2.Weak<K,V>`

    - ### Nested classes/interfaces inherited from class java.util.AbstractMap

      `java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V>`

    - ### Nested classes/interfaces inherited from interface java.util.Map

      `java.util.Map.Entry<K,V>`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ReferenceValueMap2()`
    `ReferenceValueMap2(java.util.Map<K,KeyedReference<K,V>> map)`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `clear()`
    `boolean` | `containsKey(java.lang.Object key)`
    `boolean` | `containsValue(java.lang.Object value)`
    `protected java.lang.ref.ReferenceQueue<V>` | `createQueue()`
    `protected abstract KeyedReference<K,V>` | `createReference(K key, V value, java.lang.ref.ReferenceQueue<V> queue)`
    `protected V` | `dereference(KeyedReference<K,V> ref)`
    `java.util.Set<java.util.Map.Entry<K,V>>` | `entrySet()`
    `V` | `get(java.lang.Object key)`
    `protected int` | `internalPurgeQueue()`
    `boolean` | `isEmpty()`
    `protected void` | `purged(K key)`
    `protected void` | `purgeQueue()`
    `V` | `put(K key, V value)`
    `V` | `remove(java.lang.Object key)`
    `int` | `size()`

    - ### Methods inherited from class java.util.AbstractMap

      `clone, equals, hashCode, keySet, putAll, toString, values`

    - ### Methods inherited from class java.lang.Object

      `finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface java.util.Map

      `compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll`

- - ### Constructor Detail

    - #### ReferenceValueMap2

          public ReferenceValueMap2()

    - #### ReferenceValueMap2

          public ReferenceValueMap2(java.util.Map<K,KeyedReference<K,V>> map)

  - ### Method Detail

    - #### size

          public int size()

      Specified by:
        `size` in interface `java.util.Map<K,V>`
      Overrides:
        `size` in class `java.util.AbstractMap<K,V>`

    - #### isEmpty

          public boolean isEmpty()

      Specified by:
        `isEmpty` in interface `java.util.Map<K,V>`
      Overrides:
        `isEmpty` in class `java.util.AbstractMap<K,V>`

    - #### containsKey

          public boolean containsKey(java.lang.Object key)

      Specified by:
        `containsKey` in interface `java.util.Map<K,V>`
      Overrides:
        `containsKey` in class `java.util.AbstractMap<K,V>`

    - #### containsValue

          public boolean containsValue(java.lang.Object value)

      Specified by:
        `containsValue` in interface `java.util.Map<K,V>`
      Overrides:
        `containsValue` in class `java.util.AbstractMap<K,V>`

    - #### get

          public V get(java.lang.Object key)

      Specified by:
        `get` in interface `java.util.Map<K,V>`
      Overrides:
        `get` in class `java.util.AbstractMap<K,V>`

    - #### put

          public V put(K key,
                       V value)

      Specified by:
        `put` in interface `java.util.Map<K,V>`
      Overrides:
        `put` in class `java.util.AbstractMap<K,V>`

    - #### remove

          public V remove(java.lang.Object key)

      Specified by:
        `remove` in interface `java.util.Map<K,V>`
      Overrides:
        `remove` in class `java.util.AbstractMap<K,V>`

    - #### clear

          public void clear()

      Specified by:
        `clear` in interface `java.util.Map<K,V>`
      Overrides:
        `clear` in class `java.util.AbstractMap<K,V>`

    - #### entrySet

          public java.util.Set<java.util.Map.Entry<K,V>> entrySet()

      Specified by:
        `entrySet` in interface `java.util.Map<K,V>`
      Specified by:
        `entrySet` in class `java.util.AbstractMap<K,V>`

    - #### createQueue

          protected java.lang.ref.ReferenceQueue<V> createQueue()

    - #### internalPurgeQueue

          protected int internalPurgeQueue()

      Since:
        3.7

    - #### purgeQueue

          protected void purgeQueue()

    - #### purged

          protected void purged(K key)

    - #### dereference

          protected V dereference(KeyedReference<K,V> ref)

    - #### createReference

          protected abstract KeyedReference<K,V> createReference(K key,
                                                                 V value,
                                                                 java.lang.ref.ReferenceQueue<V> queue)

Copyright (c) 2004-2019 Eike Stepper (Loehne, Germany) and others.
All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html