|
Spring for Android | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjava.util.AbstractMap<K,V>
org.springframework.util.ConcurrentReferenceHashMap<K,V>
K
- The key typeV
- The value typepublic class ConcurrentReferenceHashMap<K,V>
A ConcurrentHashMap
that uses soft
or
weak references for both keys
and values
.
This class can be used as an alternative to
Collections.synchronizedMap(new WeakHashMap<K, Reference<V>>())
in order to
support better performance when accessed concurrently. This implementation follows the
same design constraints as ConcurrentHashMap
with the exception that
null
values and null
keys are supported.
NOTE: The use of references means that there is no guarantee that items placed into the map will be subsequently available. The garbage collector may discard references at any time, so it may appear that an unknown thread is silently removing entries.
If not explicitly specified, this implementation will use soft entry references.
Nested Class Summary | |
---|---|
protected static class |
ConcurrentReferenceHashMap.Entry<K,V>
A single map entry. |
protected static interface |
ConcurrentReferenceHashMap.Reference<K,V>
A reference to an ConcurrentReferenceHashMap.Entry contained in the map. |
protected class |
ConcurrentReferenceHashMap.ReferenceManager
Strategy class used to manage ConcurrentReferenceHashMap.Reference s. |
static class |
ConcurrentReferenceHashMap.ReferenceType
Various reference types supported by this map. |
protected static class |
ConcurrentReferenceHashMap.Restructure
The types of restructuring that can be performed. |
protected class |
ConcurrentReferenceHashMap.Segment
A single segment used to divide the map to allow better concurrent performance. |
Nested classes/interfaces inherited from class java.util.AbstractMap |
---|
java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V> |
Constructor Summary | |
---|---|
ConcurrentReferenceHashMap()
Create a new ConcurrentReferenceHashMap instance. |
|
ConcurrentReferenceHashMap(int initialCapacity)
Create a new ConcurrentReferenceHashMap instance. |
|
ConcurrentReferenceHashMap(int initialCapacity,
ConcurrentReferenceHashMap.ReferenceType referenceType)
Create a new ConcurrentReferenceHashMap instance. |
|
ConcurrentReferenceHashMap(int initialCapacity,
float loadFactor)
Create a new ConcurrentReferenceHashMap instance. |
|
ConcurrentReferenceHashMap(int initialCapacity,
float loadFactor,
int concurrencyLevel)
Create a new ConcurrentReferenceHashMap instance. |
|
ConcurrentReferenceHashMap(int initialCapacity,
float loadFactor,
int concurrencyLevel,
ConcurrentReferenceHashMap.ReferenceType referenceType)
Create a new ConcurrentReferenceHashMap instance. |
|
ConcurrentReferenceHashMap(int initialCapacity,
int concurrencyLevel)
Create a new ConcurrentReferenceHashMap instance. |
Method Summary | |
---|---|
protected static int |
calculateShift(int minimumValue,
int maximumValue)
Calculate a shift value that can be used to create a power-of-two value between the specified maximum and minimum values. |
void |
clear()
|
boolean |
containsKey(java.lang.Object key)
|
protected ConcurrentReferenceHashMap.ReferenceManager |
createReferenceManager()
Factory method that returns the ConcurrentReferenceHashMap.ReferenceManager . |
java.util.Set<java.util.Map.Entry<K,V>> |
entrySet()
|
V |
get(java.lang.Object key)
|
protected int |
getHash(java.lang.Object o)
Get the hash for a given object, apply an additional hash function to reduce collisions. |
protected float |
getLoadFactor()
|
protected ConcurrentReferenceHashMap.Reference<K,V> |
getReference(java.lang.Object key,
ConcurrentReferenceHashMap.Restructure restructure)
Return a ConcurrentReferenceHashMap.Reference to the ConcurrentReferenceHashMap.Entry for the specified key ,
or null if not found. |
protected ConcurrentReferenceHashMap.Segment |
getSegment(int index)
|
protected int |
getSegmentsSize()
|
void |
purgeUnreferencedEntries()
Remove any entries that have been garbage collected and are no longer referenced. |
V |
put(K key,
V value)
|
V |
putIfAbsent(K key,
V value)
|
V |
remove(java.lang.Object key)
|
boolean |
remove(java.lang.Object key,
java.lang.Object value)
|
V |
replace(K key,
V value)
|
boolean |
replace(K key,
V oldValue,
V newValue)
|
int |
size()
|
Methods inherited from class java.util.AbstractMap |
---|
clone, containsValue, equals, hashCode, isEmpty, 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 |
---|
containsValue, equals, hashCode, isEmpty, keySet, putAll, values |
Constructor Detail |
---|
public ConcurrentReferenceHashMap()
ConcurrentReferenceHashMap
instance.
public ConcurrentReferenceHashMap(int initialCapacity)
ConcurrentReferenceHashMap
instance.
initialCapacity
- the initial capacity of the mappublic ConcurrentReferenceHashMap(int initialCapacity, float loadFactor)
ConcurrentReferenceHashMap
instance.
initialCapacity
- the initial capacity of the maploadFactor
- the load factor. When the average number of references per table
exceeds this value resize will be attemptedpublic ConcurrentReferenceHashMap(int initialCapacity, int concurrencyLevel)
ConcurrentReferenceHashMap
instance.
initialCapacity
- the initial capacity of the mapconcurrencyLevel
- the expected number of threads that will concurrently
write to the mappublic ConcurrentReferenceHashMap(int initialCapacity, ConcurrentReferenceHashMap.ReferenceType referenceType)
ConcurrentReferenceHashMap
instance.
initialCapacity
- the initial capacity of the mapreferenceType
- the reference type used for entries (soft or weak)public ConcurrentReferenceHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
ConcurrentReferenceHashMap
instance.
initialCapacity
- the initial capacity of the maploadFactor
- the load factor. When the average number of references per
table exceeds this value, resize will be attempted.concurrencyLevel
- the expected number of threads that will concurrently
write to the mappublic ConcurrentReferenceHashMap(int initialCapacity, float loadFactor, int concurrencyLevel, ConcurrentReferenceHashMap.ReferenceType referenceType)
ConcurrentReferenceHashMap
instance.
initialCapacity
- the initial capacity of the maploadFactor
- the load factor. When the average number of references per
table exceeds this value, resize will be attempted.concurrencyLevel
- the expected number of threads that will concurrently
write to the mapreferenceType
- the reference type used for entries (soft or weak)Method Detail |
---|
protected final float getLoadFactor()
protected final int getSegmentsSize()
protected final ConcurrentReferenceHashMap.Segment getSegment(int index)
protected ConcurrentReferenceHashMap.ReferenceManager createReferenceManager()
ConcurrentReferenceHashMap.ReferenceManager
.
This method will be called once for each ConcurrentReferenceHashMap.Segment
.
protected int getHash(java.lang.Object o)
ConcurrentHashMap
. Subclasses can override to provide alternative hashing.
o
- the object to hash (may be null)
public V get(java.lang.Object key)
get
in interface java.util.Map<K,V>
get
in class java.util.AbstractMap<K,V>
public boolean containsKey(java.lang.Object key)
containsKey
in interface java.util.Map<K,V>
containsKey
in class java.util.AbstractMap<K,V>
protected final ConcurrentReferenceHashMap.Reference<K,V> getReference(java.lang.Object key, ConcurrentReferenceHashMap.Restructure restructure)
ConcurrentReferenceHashMap.Reference
to the ConcurrentReferenceHashMap.Entry
for the specified key
,
or null
if not found.
key
- the key (can be null
)restructure
- types of restructure allowed during this call
null
if not foundpublic V put(K key, V value)
put
in interface java.util.Map<K,V>
put
in class java.util.AbstractMap<K,V>
public V putIfAbsent(K key, V value)
putIfAbsent
in interface java.util.concurrent.ConcurrentMap<K,V>
public V remove(java.lang.Object key)
remove
in interface java.util.Map<K,V>
remove
in class java.util.AbstractMap<K,V>
public boolean remove(java.lang.Object key, java.lang.Object value)
remove
in interface java.util.concurrent.ConcurrentMap<K,V>
public boolean replace(K key, V oldValue, V newValue)
replace
in interface java.util.concurrent.ConcurrentMap<K,V>
public V replace(K key, V value)
replace
in interface java.util.concurrent.ConcurrentMap<K,V>
public void clear()
clear
in interface java.util.Map<K,V>
clear
in class java.util.AbstractMap<K,V>
public void purgeUnreferencedEntries()
public int size()
size
in interface java.util.Map<K,V>
size
in class java.util.AbstractMap<K,V>
public java.util.Set<java.util.Map.Entry<K,V>> entrySet()
entrySet
in interface java.util.Map<K,V>
entrySet
in class java.util.AbstractMap<K,V>
protected static int calculateShift(int minimumValue, int maximumValue)
minimumValue
- the minimum valuemaximumValue
- the maximum value
1 << shift
to obtain a value)
|
Spring for Android | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |