- java.lang.Object
-
- java.util.Dictionary<K,V>
-
- java.util.Hashtable<K,V>
-
- 型パラメータ:
K
- このマップで保持されるキーの型V
- マップされる値の型
- すべての実装されたインタフェース:
Serializable
,Cloneable
,Map<K,V>
- 直系の既知のサブクラス:
Properties
,UIDefaults
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
このクラスは、ハッシュ表(キーを値にマップ)を実装します。null
オブジェクト以外であれば、どのオブジェクトでもキーや値に使用することができます。ハッシュ表にオブジェクトを格納したり、そこから取り出したりするには、キーとして使用するオブジェクトに、
hashCode
メソッドとequals
メソッドが実装されていなければなりません。Hashtable
のインスタンスには、その性能に影響を与える2つのパラメータである初期容量および負荷係数があります。 容量はハッシュ表のバケット数であり、初期容量は単純にハッシュ表が作成された時点での容量です。 ハッシュ表はオープンであることに注意してください。「ハッシュの衝突」という、1つのバケットが複数のエントリを格納する現象があり、その場合それらのエントリはシーケンシャル・サーチされることになります。 負荷係数は、ハッシュ表がどの程度いっぱいになると、その容量が自動的に増加されるかの基準です。 初期容量と負荷係数パラメータは、実装のヒントに過ぎません。 rehashメソッドがいつ呼び出されるか、および呼び出されるかどうかは、実装により異なります。通常、デフォルトの負荷係数(.75)では、時間コストとスペース・コストの釣合いを取ります。 この値を大きくするとスペースのオーバーヘッドは減少しますが、エントリを参照するための時間のコストは増加し、
get
およびput
を含むほとんどのHashtable
オペレーションが影響を受けます。初期容量により、浪費スペースと(時間のかかる)
rehash
オペレーションの需要との間の釣合いが制御されます。 初期容量が、Hashtable
の格納するエントリの最大数を負荷係数で割った値より大きい場合、rehash
オペレーションは起こりません。 ただし、初期容量を高く設定しすぎると、スペースの浪費になります。Hashtable
に多くのエントリを入れる場合は、この表を十分に大きな容量で作成する方が、必要に応じてハッシュを自動的にやり直して表を大きくするよりも、エントリを効率的に挿入することができます。この例は、数値のハッシュ表を作成します。 この例では、数値の名前をキーとして使います。
Hashtable<String, Integer> numbers = new Hashtable<String, Integer>(); numbers.put("one", 1); numbers.put("two", 2); numbers.put("three", 3);
数値を取り出すには、次のコードを使います。
Integer n = numbers.get("two"); if (n != null) { System.out.println("two = " + n); }
このクラスのすべてのコレクション・ビュー・メソッドによって返されるコレクションの
iterator
メソッドによって返されるイテレータは、フェイルファストです。イテレータの作成後に、イテレータ自体のremove
メソッド以外の方法でHashtableが構造的に変更されると、イテレータはConcurrentModificationException
をスローします。 このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。 Hashtablekeys
およびelements
メソッドによって返される列挙型は、高速ではありません。列挙型が作成された後にいつでもHashtableが構造的に変更された場合、列挙型の結果は未定義です。通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、イテレータのフェイルファストの動作を保証することはできません。 フェイルファスト・イテレータは、ベスト・エフォート・ベースで
ConcurrentModificationException
をスローします。 したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。イテレータのフェイルファストの動作はバグを検出するためにのみ使用すべきです。このクラスは、Java 2プラットフォームv1.2の時点で
Map
インタフェースを実装するように改良された結果、Java Collections Frameworkのメンバーとなりました。 新しいコレクションの実装とは異なり、Hashtable
は同期をとります。 スレッドセーフな実装が必要ない場合は、Hashtable
の代わりにHashMap
を使用することをお薦めします。 スレッドセーフで高度な並列実装が必要な場合は、Hashtable
の代わりにConcurrentHashMap
を使用することをお薦めします。- 導入されたバージョン:
- 1.0
- 関連項目:
Object.equals(java.lang.Object)
,Object.hashCode()
,rehash()
,Collection
,Map
,HashMap
,TreeMap
, 直列化された形式
-
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 Hashtable()
デフォルトの初期容量(11)と負荷係数(0.75)で新規の空のハッシュ表を生成します。Hashtable(int initialCapacity)
指定された初期容量およびデフォルトの負荷係数(0.75)で新しい空のハッシュ表を生成します。Hashtable(int initialCapacity, float loadFactor)
指定された初期容量と負荷係数で新しい空のハッシュ表を生成します。Hashtable(Map<? extends K,? extends V> t)
指定されたMapと同じマッピングで新しいハッシュ表を生成します。
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 void
clear()
このハッシュ表をクリアして、キーがない状態にします。Object
clone()
ハッシュ表のコピーを作成します。V
compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
指定されたキーと現在マップされている値に対するマッピングの計算を試みます(現在のマッピングが存在しない場合はnull
)。V
computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
指定されたキーがまだ値に関連付けられていない(またはnull
にマップされている)場合、指定されたマッピング関数を使用してその値の計算を試行し、null
でない場合はそれをこのマップに入力します。V
computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
指定されたキーの値が存在していてnull以外の場合、キーと現在マップされている値から新しいマッピングの計算を試みます。boolean
contains(Object value)
指定された値にマップされているキーが、ハッシュ表にあるかどうかを判定します。boolean
containsKey(Object key)
指定されたオブジェクトが、ハッシュ表のキーかどうかを判定します。boolean
containsValue(Object value)
このハッシュ表が1つまたは複数のキーをこの値にマッピングする場合にtrueを返します。Enumeration<V>
elements()
ハッシュ表にある値のリストを返します。Set<Map.Entry<K,V>>
entrySet()
このマップに含まれるマッピングのSet
ビューを返します。boolean
equals(Object o)
Mapインタフェースでの定義に従って、指定されたObjectとこのMapを比較して等しいかどうかを判定します。V
get(Object key)
指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnull
を返します。int
hashCode()
Mapインタフェースの定義に従って、このMapのハッシュ・コード値を返します。boolean
isEmpty()
値にマップされているキーが、ハッシュ表にあるかどうかを判定します。Enumeration<K>
keys()
ハッシュ表にあるキーのリストを返します。Set<K>
keySet()
このマップに含まれるキーのSet
ビューを返します。V
merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
指定されたキーがまだ値と関連付けられていないかnullと関連付けられている場合、指定されたnull以外の値に関連付けます。V
put(K key, V value)
このハッシュ表で、指定されたkey
を指定されたvalue
にマップします。void
putAll(Map<? extends K,? extends V> t)
指定したマップからこのハッシュ表にすべてのマッピングをコピーします。protected void
rehash()
ハッシュ表の容量を増やし、それを内部的に再編成して、エントリを調整してアクセスをより効率的にします。V
remove(Object key)
キー(およびそれに対応する値)をハッシュ表から削除します。int
size()
ハッシュ表にあるキーの数を返します。String
toString()
このHashtable
オブジェクトの文字列表現を、ASCII文字「,
」(カンマとスペース)で区切り、カッコで囲んだ一連のエントリの形式で返します。Collection<V>
values()
このマップに含まれる値のCollection
ビューを返します。-
インタフェース java.util.Mapで宣言されたメソッド
forEach, getOrDefault, putIfAbsent, remove, replace, replace, replaceAll
-
-
-
-
コンストラクタの詳細
-
Hashtable
public Hashtable(int initialCapacity, float loadFactor)
指定された初期容量と負荷係数で新しい空のハッシュ表を生成します。- パラメータ:
initialCapacity
- ハッシュ表の初期容量。loadFactor
- ハッシュ表の負荷係数。- 例外:
IllegalArgumentException
- 初期容量がゼロよりも小さい場合、または負荷係数が正でない場合。
-
Hashtable
public Hashtable(int initialCapacity)
指定された初期容量およびデフォルトの負荷係数(0.75)で新しい空のハッシュ表を生成します。- パラメータ:
initialCapacity
- ハッシュ表の初期容量。- 例外:
IllegalArgumentException
- 初期容量が0よりも小さい場合。
-
Hashtable
public Hashtable()
デフォルトの初期容量(11)と負荷係数(0.75)で新規の空のハッシュ表を生成します。
-
Hashtable
public Hashtable(Map<? extends K,? extends V> t)
指定されたMapと同じマッピングで新しいハッシュ表を生成します。 指定されたMapのマッピングを保持するのに十分な初期容量、およびデフォルトの負荷係数(0.75)で、ハッシュ表は作成されます。- パラメータ:
t
- マッピングがこのマップに配置されるマップ。- 例外:
NullPointerException
- 指定されたマップがnullの場合。- 導入されたバージョン:
- 1.2
-
-
メソッドの詳細
-
size
public int size()
ハッシュ表にあるキーの数を返します。
-
isEmpty
public boolean isEmpty()
値にマップされているキーが、ハッシュ表にあるかどうかを判定します。
-
keys
public Enumeration<K> keys()
ハッシュ表にあるキーのリストを返します。 返されたオブジェクトのEnumerationメソッドを使用して、キーを順番に取得します。 ハッシュテーブルがキーの上で列挙している間に構造的に変更されている場合、列挙型の結果は未定義です。- 定義:
- クラス
Dictionary<K,V>
のkeys
- 戻り値:
- ハッシュ表にあるキーのリスト。
- 関連項目:
Enumeration
,elements()
,keySet()
,Map
-
elements
public Enumeration<V> elements()
ハッシュ表にある値のリストを返します。 これらの要素を順次に取り出すには、Enumerationのメソッドを使用します。 値を列挙型しながらハッシュテーブルが構造的に変更された場合、列挙型の結果は未定義です。- 定義:
- クラス
Dictionary<K,V>
のelements
- 戻り値:
- ハッシュ表にある値のリスト。
- 関連項目:
Enumeration
,keys()
,values()
,Map
-
contains
public boolean contains(Object value)
指定された値にマップされているキーが、ハッシュ表にあるかどうかを判定します。 この操作は、containsKey
メソッドよりも負荷がかかります。このメソッドは、機能の点で
containsValue
(コレクション・フレームワークのMap
インタフェースの一部)と同じです。- パラメータ:
value
- 検索する値- 戻り値:
- あるキーが、
equals
メソッドで決められている、ハッシュ表のvalue
引数にマッピングする場合はtrue
、そうでない場合はfalse
。 - 例外:
NullPointerException
- 値がnull
の場合
-
containsValue
public boolean containsValue(Object value)
- 定義:
- インタフェース
Map<K,V>
内のcontainsValue
- パラメータ:
value
- ハッシュ表にあるかどうかを判定される値- 戻り値:
- このマップが1つまたは複数のキーを指定された値にマッピングしている場合は
true
- 例外:
NullPointerException
- 値がnull
の場合- 導入されたバージョン:
- 1.2
-
containsKey
public boolean containsKey(Object key)
指定されたオブジェクトが、ハッシュ表のキーかどうかを判定します。- 定義:
- インタフェース
Map<K,V>
内のcontainsKey
- パラメータ:
key
- 使用可能なキー- 戻り値:
equals
メソッドで決められているように、指定されたオブジェクトがこのハッシュ表のキーである場合はtrue
、そうでない場合はfalse
。- 例外:
NullPointerException
- キーがnull
の場合- 関連項目:
contains(Object)
-
get
public V get(Object key)
指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnull
を返します。つまり、このメソッドは、
(key.equals(k))
となるキーk
から値v
へのマッピングがこのマップに含まれている場合はv
を返し、それ以外の場合はnull
を返します。 (このようなマッピングは1つのみ存在できます。)- 定義:
- インタフェース
Map<K,V>
内のget
- 定義:
- クラス
Dictionary<K,V>
のget
- パラメータ:
key
- 関連付けられた値が返されるキー- 戻り値:
- 指定されたキーがマップされている値。そのキーのマッピングがこのマップに含まれていない場合は
null
- 例外:
NullPointerException
- 指定されたキーがnullである場合- 関連項目:
put(Object, Object)
-
rehash
protected void rehash()
ハッシュ表の容量を増やし、それを内部的に再編成して、エントリを調整してアクセスをより効率的にします。 ハッシュ表にあるキーの数がハッシュ表の容量と負荷係数を超えると、このメソッドが自動的に呼び出されます。
-
put
public V put(K key, V value)
このハッシュ表で、指定されたkey
を指定されたvalue
にマップします。 キーや値はnull
にすることはできません。valueを取得するには、元のkeyに等しいkeyを指定して
get
メソッドを呼び出します。- 定義:
- インタフェース
Map<K,V>
内のput
- 定義:
- クラス
Dictionary<K,V>
のput
- パラメータ:
key
- ハッシュ表キーvalue
- 値- 戻り値:
- ハッシュ表の指定されたキーの前の値。それがない場合は
null
- 例外:
NullPointerException
キーまたは値がnull
の場合- 関連項目:
Object.equals(Object)
,get(Object)
-
remove
public V remove(Object key)
キー(およびそれに対応する値)をハッシュ表から削除します。 そのキーがハッシュ表にない場合は、何も行いません。- 定義:
- インタフェース
Map<K,V>
内のremove
- 定義:
- クラス
Dictionary<K,V>
のremove
- パラメータ:
key
- 削除するキー- 戻り値:
- ハッシュ表でそのキーにマップされている値。マップされている値がない場合は
null
- 例外:
NullPointerException
- キーがnull
の場合
-
putAll
public void putAll(Map<? extends K,? extends V> t)
指定したマップからこのハッシュ表にすべてのマッピングをコピーします。 これにより、ハッシュ表が指定されたマップ内に現在あるキーのすべてに対して持っていたマッピングが置き換えられます。- 定義:
- インタフェース
Map<K,V>
内のputAll
- パラメータ:
t
- このマップに格納されるマッピング- 例外:
NullPointerException
- 指定されたマップがnullの場合- 導入されたバージョン:
- 1.2
-
clone
public Object clone()
ハッシュ表のコピーを作成します。 ハッシュ表の構造自体はすべてコピーされますが、キーおよび値は複製されません。 これは、比較的負担の大きい操作です。
-
toString
public String toString()
このHashtable
オブジェクトの文字列表現を、ASCII文字「,
」(カンマとスペース)で区切り、カッコで囲んだ一連のエントリの形式で返します。 各エントリはキー、等符号=
、および関連した要素として描画され、toString
メソッドはキーおよび要素を文字列に変換するために使用されます。
-
keySet
public Set<K> keySet()
このマップに含まれるキーのSet
ビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合、反復処理の結果は定義されていません(イテレータ自身のremove
オペレーションを除く)。 セットは要素の削除をサポートします。Iterator.remove
、Set.remove
、removeAll
、retainAll
、およびclear
オペレーションで対応するマッピングをマップから削除します。add
またはaddAll
操作はサポートされていません。
-
entrySet
public Set<Map.Entry<K,V>> entrySet()
このマップに含まれるマッピングのSet
ビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合、反復処理の結果は定義されません(イテレータ自身のremove
オペレーション、またはイテレータにより返されるマップ・エントリに対するsetValue
オペレーションを除く)。 セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove
、Set.remove
、removeAll
、retainAll
、およびclear
オペレーションを通して行います。add
またはaddAll
操作はサポートされていません。
-
values
public Collection<V> values()
このマップに含まれる値のCollection
ビューを返します。 コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。 コレクションの反復処理中にマップが変更された場合、反復処理の結果は定義されません(イテレータ自身のremove
オペレーションを除く)。 コレクションは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove
、Collection.remove
、removeAll
、retainAll
、およびclear
オペレーションを通して行います。add
またはaddAll
操作はサポートされていません。
-
equals
public boolean equals(Object o)
Mapインタフェースでの定義に従って、指定されたObjectとこのMapを比較して等しいかどうかを判定します。
-
hashCode
public int hashCode()
Mapインタフェースの定義に従って、このMapのハッシュ・コード値を返します。
-
computeIfAbsent
public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
指定されたキーがまだ値に関連付けられていない(またはnull
にマップされている)場合、指定されたマッピング関数を使用してその値の計算を試行し、null
でない場合はそれをこのマップに入力します。マッピング関数が
null
を返した場合、マッピングは記録されません。 マッピング関数自体が(unchecked)例外をスローすると、例外は再スローされ、マッピングは記録されません。 もっとも一般的な用途は、次のように初期のマップされた値またはメモ化された結果として機能する新しいオブジェクトを構築することです。map.computeIfAbsent(key, k -> new Value(f(k)));
または、1つのキーで複数の値をサポートする複数値マップ
Map<K,Collection<V>>
を実装することです。map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
マッピング関数は、計算中にこのマップを変更すべきではありません。
このメソッドは、ベスト・エフォート・ベースで、マッピング関数が計算中にこのマップを変更した場合に
ConcurrentModificationException
をスローします。- 定義:
- インタフェース
Map<K,V>
内のcomputeIfAbsent
- パラメータ:
key
- 指定された値が関連付けられるキーmappingFunction
- 値をコンピュートするマッピング関数- 戻り値:
- 指定されたキーに関連付けられている現在の(既存の、または計算された)値。計算された値がnullである場合はnull
- 例外:
ConcurrentModificationException
- マップ機能がこのマップを変更したことが検出された場合
-
computeIfPresent
public V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
指定されたキーの値が存在していてnull以外の場合、キーと現在マップされている値から新しいマッピングの計算を試みます。リマッピング関数が
null
を返した場合、マッピングは削除されます。 再マップ関数自体が(unchecked)例外をスローすると、例外が再スローされ、現在のマッピングは変更されません。再マップ関数は、計算中にこのマップを変更すべきではありません。
このメソッドは、リマップ関数が計算中にこのマップを変更した場合、ベスト・エフォート・ベースで
ConcurrentModificationException
をスローします。- 定義:
- インタフェース
Map<K,V>
内のcomputeIfPresent
- パラメータ:
key
- 指定された値が関連付けられるキーremappingFunction
- 値をコンピュートするための再マップ関数- 戻り値:
- 指定されたキーに関連付けられる新しい値。存在しない場合はnull
- 例外:
ConcurrentModificationException
- リマッピング機能がこのマップを変更したことが検出された場合
-
compute
public V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
指定されたキーと現在マップされている値に対するマッピングの計算を試みます(現在のマッピングが存在しない場合はnull
)。 たとえば、次のように、値のマッピングにString
msgを作成または追加します。map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
merge()
メソッドは、多くの場合、より単純です。)再マッピング関数が
null
を返した場合、マッピングは削除されます。(最初に欠席した場合は不在のままです)。 再マップ関数自体が(unchecked)例外をスローすると、例外が再スローされ、現在のマッピングは変更されません。再マップ関数は、計算中にこのマップを変更すべきではありません。
このメソッドは、リマップ関数が計算中にこのマップを変更した場合、ベスト・エフォート・ベースで
ConcurrentModificationException
をスローします。- 定義:
- インタフェース
Map<K,V>
内のcompute
- パラメータ:
key
- 指定された値が関連付けられるキーremappingFunction
- 値をコンピュートするための再マップ関数- 戻り値:
- 指定されたキーに関連付けられる新しい値。存在しない場合はnull
- 例外:
ConcurrentModificationException
- リマッピング機能がこのマップを変更したことが検出された場合
-
merge
public V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
指定されたキーがまだ値と関連付けられていないかnullと関連付けられている場合、指定されたnull以外の値に関連付けます。 それ以外の場合は、指定された再マッピング関数の結果で関連する値を置換し、結果がnull
の場合は削除します。 このメソッドは、1つのキーに対する複数のマップされた値を結合するときに使用できます。 たとえば、次のように、値のマッピングにString msg
を作成または追加します。map.merge(key, msg, String::concat)
リマッピング関数が
null
を返した場合、マッピングは削除されます。 再マップ関数自体が(unchecked)例外をスローすると、例外が再スローされ、現在のマッピングは変更されません。再マップ関数は、計算中にこのマップを変更すべきではありません。
このメソッドは、リマップ関数が計算中にこのマップを変更した場合、ベスト・エフォート・ベースで
ConcurrentModificationException
をスローします。- 定義:
- インタフェース
Map<K,V>
内のmerge
- パラメータ:
key
- 結果値が関連付けられるキーvalue
- キーに関連付けられた既存の値にマージされるnull以外の値。既存の値がない場合、またはキーにnull値が関連付けられている場合は、キーに関連付けられるnull以外の値remappingFunction
- 存在する場合に値を再計算するための再マッピング関数- 戻り値:
- 指定されたキーに関連付けられた新しい値。キーに値が関連付けられなかった場合はnull
- 例外:
ConcurrentModificationException
- リマッピング機能がこのマップを変更したことが検出された場合
-
-