K
- キー型 V
- 値の型 public class ConcurrentReferenceHashMap<K,V>
extends java.util.AbstractMap<K,V>
implements java.util.concurrent.ConcurrentMap<K,V>
keys
と values
の両方に soft
または弱い参照を使用する ConcurrentHashMap
。 このクラスは、同時にアクセスした場合のパフォーマンスを向上させるために、Collections.synchronizedMap(new WeakHashMap<K, Reference<V>>())
の代わりに使用できます。この実装は、null
値と null
キーがサポートされていることを除いて、ConcurrentHashMap
と同じ設計上の制約に従います。
注意 : 参照の使用は、マップに配置されたアイテムが後で利用可能になるという保証がないことを意味します。ガベージコレクターはいつでも参照を破棄する可能性があるため、不明なスレッドが静かにエントリを削除しているように見えることがあります。
明示的に指定されていない場合、この実装はソフトエントリ参照を使用します。
修飾子と型 | クラスと説明 |
---|---|
protected static class | ConcurrentReferenceHashMap.Entry<K, V> 単一のマップエントリ。 |
protected static interface | ConcurrentReferenceHashMap.Reference<K, V> マップに含まれる ConcurrentReferenceHashMap.Entry への参照。 |
protected class | ConcurrentReferenceHashMap.ReferenceManager References を管理するために使用される戦略クラス。 |
static class | ConcurrentReferenceHashMap.ReferenceType このマップでサポートされるさまざまな参照型。 |
protected static class | ConcurrentReferenceHashMap.Restructure 実行できる再構築の種類。 |
protected class | ConcurrentReferenceHashMap.Segment 同時パフォーマンスを向上させるためにマップを分割するために使用される単一のセグメント。 |
コンストラクターと説明 |
---|
ConcurrentReferenceHashMap() 新しい ConcurrentReferenceHashMap インスタンスを作成します。 |
ConcurrentReferenceHashMap(int initialCapacity) 新しい ConcurrentReferenceHashMap インスタンスを作成します。 |
ConcurrentReferenceHashMap(int initialCapacity, ConcurrentReferenceHashMap.ReferenceType referenceType) 新しい ConcurrentReferenceHashMap インスタンスを作成します。 |
ConcurrentReferenceHashMap(int initialCapacity, float loadFactor) 新しい ConcurrentReferenceHashMap インスタンスを作成します。 |
ConcurrentReferenceHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) 新しい ConcurrentReferenceHashMap インスタンスを作成します。 |
ConcurrentReferenceHashMap(int initialCapacity, float loadFactor, int concurrencyLevel, ConcurrentReferenceHashMap.ReferenceType referenceType) 新しい ConcurrentReferenceHashMap インスタンスを作成します。 |
ConcurrentReferenceHashMap(int initialCapacity, int concurrencyLevel) 新しい ConcurrentReferenceHashMap インスタンスを作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected static int | calculateShift(int minimumValue, int maximumValue) 指定された最大値と最小値の間の 2 のべき乗値を作成するために使用できるシフト値を計算します。 |
void | clear() |
boolean | containsKey(java.lang.Object key) |
protected ConcurrentReferenceHashMap.ReferenceManager | createReferenceManager() 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) 特定のオブジェクトのハッシュを取得し、追加のハッシュ関数を適用して衝突を減らします。 |
protected float | getLoadFactor() |
V | getOrDefault(java.lang.Object key, V defaultValue) |
protected ConcurrentReferenceHashMap.Reference<K, V> | getReference(java.lang.Object key, ConcurrentReferenceHashMap.Restructure restructure) 指定された key の ConcurrentReferenceHashMap.Reference を ConcurrentReferenceHashMap.Entry に返します。見つからない場合は null を返します。 |
protected ConcurrentReferenceHashMap.Segment | getSegment(int index) |
protected int | getSegmentsSize() |
boolean | isEmpty() |
void | purgeUnreferencedEntries() ガベージコレクションされ、参照されなくなったエントリを削除します。 |
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() |
clone, containsValue, equals, hashCode, keySet, putAll, toString, values
public ConcurrentReferenceHashMap()
ConcurrentReferenceHashMap
インスタンスを作成します。public ConcurrentReferenceHashMap(int initialCapacity)
ConcurrentReferenceHashMap
インスタンスを作成します。initialCapacity
- マップの初期容量 public ConcurrentReferenceHashMap(int initialCapacity, float loadFactor)
ConcurrentReferenceHashMap
インスタンスを作成します。initialCapacity
- マップの初期容量 loadFactor
- 負荷率。テーブルごとの平均参照数がこの値を超えると、サイズ変更が試行されます public ConcurrentReferenceHashMap(int initialCapacity, int concurrencyLevel)
ConcurrentReferenceHashMap
インスタンスを作成します。initialCapacity
- マップの初期容量 concurrencyLevel
- 同時にマップに書き込むスレッドの予想数 public ConcurrentReferenceHashMap(int initialCapacity, ConcurrentReferenceHashMap.ReferenceType referenceType)
ConcurrentReferenceHashMap
インスタンスを作成します。initialCapacity
- マップの初期容量 referenceType
- エントリに使用される参照型 (柔らかいか弱い)public ConcurrentReferenceHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
ConcurrentReferenceHashMap
インスタンスを作成します。initialCapacity
- マップの初期容量 loadFactor
- 負荷率。テーブルごとの平均参照数がこの値を超えると、サイズ変更が試行されます。concurrencyLevel
- 同時にマップに書き込むスレッドの予想数 public ConcurrentReferenceHashMap(int initialCapacity, float loadFactor, int concurrencyLevel, ConcurrentReferenceHashMap.ReferenceType referenceType)
ConcurrentReferenceHashMap
インスタンスを作成します。initialCapacity
- マップの初期容量 loadFactor
- 負荷率。テーブルごとの平均参照数がこの値を超えると、サイズ変更が試行されます。concurrencyLevel
- 同時にマップに書き込むスレッドの予想数 referenceType
- エントリに使用される参照型 (柔らかいか弱い)protected final float getLoadFactor()
protected final int getSegmentsSize()
protected final ConcurrentReferenceHashMap.Segment getSegment(int index)
protected ConcurrentReferenceHashMap.ReferenceManager createReferenceManager()
ConcurrentReferenceHashMap.ReferenceManager
を返すファクトリメソッド。このメソッドは、各 ConcurrentReferenceHashMap.Segment
に対して 1 回呼び出されます。protected int getHash(@Nullable java.lang.Object o)
ConcurrentHashMap
と同じ Wang/Jenkins アルゴリズムを使用します。サブクラスをオーバーライドして、代替ハッシュを提供できます。o
- ハッシュするオブジェクト (null の可能性があります)@Nullable public V getOrDefault(@Nullable java.lang.Object key, @Nullable V defaultValue)
public boolean containsKey(@Nullable java.lang.Object key)
@Nullable protected final ConcurrentReferenceHashMap.Reference<K,V> getReference(@Nullable java.lang.Object key, ConcurrentReferenceHashMap.Restructure restructure)
key
の ConcurrentReferenceHashMap.Reference
を ConcurrentReferenceHashMap.Entry
に返します。見つからない場合は null
を返します。key
- キー (null
にすることができます)restructure
- この呼び出し中に許可される再構築の型 null
public boolean remove(java.lang.Object key, java.lang.Object value)
public void clear()
public void purgeUnreferencedEntries()
public int size()
public boolean isEmpty()
protected static int calculateShift(int minimumValue, int maximumValue)
minimumValue
- 最小値 maximumValue
- 最大値 1 << shift
を使用して値を取得する)