com.atlassian.confluence.util.collections
Class LazyMap<K,V>
java.lang.Object
java.util.AbstractMap<K,V>
com.atlassian.confluence.util.collections.LazyMap<K,V>
- Type Parameters:
K
- the key type.V
- the value type.
- All Implemented Interfaces:
- Map<K,V>
@NotThreadSafe
public class LazyMap<K,V>
- extends AbstractMap<K,V>
- implements Map<K,V>
A Map
that is backed by a delegate map that contains suppliers
for the values that are called lazily when required. The values returned from the delegate
are cached so they are only retrieved once.
The goal is to reduce the overhead required to instantiate and store entries which might not
be used. For example, when rendering Velocity templates, the context map is populated with
many things that are only ever required occasionally.
Note: even though this class is effectively immutable and does not support direct mutation,
the caching strategy is not thread-safe and should not be used if thread-safety is
required. Adding thread-safety to this class would be fairly trivial through.
Nested classes/interfaces inherited from interface java.util.Map |
Map.Entry<K,V> |
newInstance
public static <K,V> LazyMap<K,V> newInstance(Map<K,? extends com.google.common.base.Supplier<? extends V>> delegate)
get
public V get(Object key)
- .
Implements the local caching of a value from the master.
- Specified by:
get
in interface Map<K,V>
- Overrides:
get
in class AbstractMap<K,V>
keySet
public Set<K> keySet()
- Specified by:
keySet
in interface Map<K,V>
- Overrides:
keySet
in class AbstractMap<K,V>
containsKey
public boolean containsKey(Object key)
- Specified by:
containsKey
in interface Map<K,V>
- Overrides:
containsKey
in class AbstractMap<K,V>
entrySet
public Set<Map.Entry<K,V>> entrySet()
- Specified by:
entrySet
in interface Map<K,V>
- Specified by:
entrySet
in class AbstractMap<K,V>
size
public int size()
- Specified by:
size
in interface Map<K,V>
- Overrides:
size
in class AbstractMap<K,V>
isEmpty
public boolean isEmpty()
- Specified by:
isEmpty
in interface Map<K,V>
- Overrides:
isEmpty
in class AbstractMap<K,V>
remove
public V remove(Object key)
- Specified by:
remove
in interface Map<K,V>
- Overrides:
remove
in class AbstractMap<K,V>