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をスローします。このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。Hashtableのキー・メソッドおよび要素メソッドによって返されるEnumerationsは、フェイルファストではありません。
通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、イテレータのフェイルファストの動作を保証することはできません。フェイルファスト・イテレータは最善努力原則に基づき、ConcurrentModificationExceptionをスローします。したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。イテレータのフェイルファストの動作はバグを検出するためにのみ使用すべきです。
このクラスは、Java 2プラットフォームv1.2の時点でMapインタフェースを実装するように改良された結果、Java Collections Frameworkのメンバーとなりました。新しいコレクションの実装とは異なり、Hashtableは同期をとります。スレッドセーフな実装が必要ない場合は、Hashtableの代わりにHashMapを使用することをお薦めします。スレッドセーフで高度な並列実装が必要な場合は、Hashtableの代わりにConcurrentHashMapを使用することをお薦めします。
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を比較して等しいかどうかを判定します。
|
void |
forEach(BiConsumer<? super K,? super V> action)
このマップのすべてのエントリの処理が完了するかアクションから例外がスローされるまで、各エントリに対して指定されたアクションを実行します。
|
V |
get(Object key)
指定されたキーがマップされている値を返します。このマップにそのキーのマッピングが含まれていない場合は
nullを返します。 |
V |
getOrDefault(Object key, V defaultValue)
指定されたキーがマップされている値を返します。このマップにそのキーのマッピングが含まれていない場合は
defaultValueを返します。 |
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)
指定したマップからこのハッシュ表にすべてのマッピングをコピーします。
|
V |
putIfAbsent(K key, V value)
指定されたキーがまだ値に関連付けられていない(または、
nullにマップされている)場合は、それを指定された値に関連付けてnullを返します。それ以外の場合は、現在の値を返します。 |
protected void |
rehash()
ハッシュ表の容量を増やし、それを内部的に再編成して、エントリを調整してアクセスをより効率的にします。
|
V |
remove(Object key)
キー(およびそれに対応する値)をハッシュ表から削除します。
|
boolean |
remove(Object key, Object value)
指定された値に指定されたキーが現在マッピングされている場合にのみ、そのキーのエントリを削除します。
|
V |
replace(K key, V value)
指定されたキーがなんらかの値に現在マッピングされている場合にのみ、そのキーのエントリを置換します。
|
boolean |
replace(K key, V oldValue, V newValue)
指定されたキーが指定された値に現在マッピングされている場合にのみ、そのキーのエントリを置換します。
|
void |
replaceAll(BiFunction<? super K,? super V,? extends V> function)
すべてのエントリが処理されるか、または関数が例外をスローするまで、各エントリの値を、そのエントリで指定された関数を呼び出した結果で置換します。
|
int |
size()
ハッシュ表にあるキーの数を返します。
|
String |
toString()
このHashtableオブジェクトの文字列表現を、ASCII文字「, 」(カンマとスペース)で区切り、カッコで囲んだ一連のエントリの形式で返します。
|
Collection<V> |
values()
このマップに含まれる値の
Collectionビューを返します。 |
public Hashtable(int initialCapacity,
float loadFactor)
initialCapacity - ハッシュ表の初期容量。loadFactor - ハッシュ表の負荷係数。IllegalArgumentException - 初期容量がゼロよりも小さい場合、または負荷係数が正でない場合。public Hashtable(int initialCapacity)
initialCapacity - ハッシュ表の初期容量。IllegalArgumentException - 初期容量が0よりも小さい場合。public Hashtable()
public Hashtable(Map<? extends K,? extends V> t)
t - マッピングがこのマップに配置されるマップ。NullPointerException - 指定されたマップがnullの場合。public int size()
public boolean isEmpty()
public Enumeration<K> keys()
keys、クラス: Dictionary<K,V>Enumeration, elements(), keySet(), Mappublic Enumeration<V> elements()
elements、クラス: Dictionary<K,V>Enumeration, keys(), values(), Mappublic boolean contains(Object value)
containsKeyメソッドよりも負荷がかかります。
このメソッドは、機能の点でcontainsValue (コレクション・フレームワークのMapインタフェースの一部)と同じです。
value - 検索する値value引数にマッピングする場合はtrue、そうでない場合はfalse。NullPointerException - 値がnullの場合public boolean containsValue(Object value)
containsValue、インタフェース: Map<K,V>value - ハッシュ表にあるかどうかを判定される値NullPointerException - 値がnullの場合public boolean containsKey(Object key)
containsKey、インタフェース: Map<K,V>key - 使用可能なキーtrue、そうでない場合はfalse。NullPointerException - キーがnullの場合contains(Object)public V get(Object key)
nullを返します。
つまり、このメソッドは、(key.equals(k))となるキーkから値vへのマッピングがこのマップに含まれている場合はvを返し、それ以外の場合はnullを返します。(このようなマッピングは1つのみ存在できます。)
get、インタフェース: Map<K,V>get、クラス: Dictionary<K,V>key - 関連付けられた値が返されるキーnullNullPointerException - 指定されたキーがnullである場合put(Object, Object)protected void rehash()
public V put(K key, V value)
keyを指定されたvalueにマップします。キーや値はnullにすることはできません。
valueを取得するには、元のkeyに等しいkeyを指定してgetメソッドを呼び出します。
put、インタフェース: Map<K,V>put、クラス: Dictionary<K,V>key - ハッシュ表キーvalue - 値nullNullPointerExceptionキーまたは値がnullの場合Object.equals(Object), get(Object)public V remove(Object key)
remove、インタフェース: Map<K,V>remove、クラス: Dictionary<K,V>key - 削除するキーnullNullPointerException - キーがnullの場合public void putAll(Map<? extends K,? extends V> t)
putAll、インタフェース: Map<K,V>t - このマップに格納されるマッピングNullPointerException - 指定されたマップがnullの場合public Object clone()
public String toString()
public Set<K> keySet()
Setビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットの反復処理中にマップが変更された場合、反復処理の結果は定義されていません(イテレータ自身のremoveオペレーションを除く)。セットは要素の削除をサポートします。Iterator.remove、Set.remove、removeAll、retainAll、およびclearオペレーションで対応するマッピングをマップから削除します。addまたはaddAllオペレーションはサポートしていません。public Set<Map.Entry<K,V>> entrySet()
Setビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットの反復処理中にマップが変更された場合、反復処理の結果は定義されていません(イテレータ自身のremoveオペレーション、またはイテレータにより返されるマップ・エントリに対するsetValueオペレーションを除く)。セットは要素の削除をサポートします。Iterator.remove、Set.remove、removeAll、retainAll、およびclearオペレーションで対応するマッピングをマップから削除します。addまたはaddAllオペレーションはサポートしていません。public Collection<V> values()
Collectionビューを返します。コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。コレクションの反復処理中にマップが変更された場合、反復処理の結果は定義されていません(イテレータ自身のremoveオペレーションを除く)。コレクションは要素の削除をサポートします。Iterator.remove、Collection.remove、removeAll、retainAll、およびclearオペレーションで対応するマッピングをマップから削除します。addまたはaddAllオペレーションはサポートしていません。public boolean equals(Object o)
public int hashCode()
public V getOrDefault(Object key, V defaultValue)
MapdefaultValueを返します。getOrDefault、インタフェース: Map<K,V>key - 関連付けられた値が返されるキーdefaultValue - キーのデフォルト・マッピングdefaultValuepublic void forEach(BiConsumer<? super K,? super V> action)
Mappublic void replaceAll(BiFunction<? super K,? super V,? extends V> function)
MapreplaceAll、インタフェース: Map<K,V>function - 各エントリに適用する関数public V putIfAbsent(K key, V value)
Mapnullにマップされている)場合は、それを指定された値に関連付けてnullを返します。それ以外の場合は、現在の値を返します。putIfAbsent、インタフェース: Map<K,V>key - 指定された値が関連付けられるキーvalue - 指定されたキーに関連付けられる値null。(また、実装がnull値をサポートしている場合、戻り値nullは、以前にマップでキーとnullが関連付けられていたことを示す場合もある。)public boolean remove(Object key, Object value)
Mappublic boolean replace(K key, V oldValue, V newValue)
Mappublic V replace(K key, V value)
Mappublic V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
Mapnullにマップされている)場合、指定されたマッピング関数を使用してその値の計算を試行し、nullでない場合はそれをこのマップに入力します。
関数がnullを返した場合、マッピングは記録されません。関数自体が(非チェック)例外をスローした場合、その例外は再スローされ、マッピングは記録されません。もっとも一般的な用途は、次のように初期のマップされた値またはメモ化された結果として機能する新しいオブジェクトを構築することです。
map.computeIfAbsent(key, k -> new Value(f(k)));
または、1つのキーで複数の値をサポートする複数値マップMap<K,Collection<V>>を実装することです。
map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
computeIfAbsent、インタフェース: Map<K,V>key - 指定された値が関連付けられるキーmappingFunction - 値を計算するための関数public V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Map関数がnullを返した場合、マッピングは削除されます。関数自体が(非チェック)例外をスローした場合、その例外は再スローされ、現在のマッピングは変更されません。
computeIfPresent、インタフェース: Map<K,V>key - 指定された値が関連付けられるキーremappingFunction - 値を計算するための関数public V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Mapnull)。たとえば、次のように、値のマッピングにString msgを作成または追加します。
map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
(このような目的で使用するmerge()メソッドは、多くの場合、より単純です。)
関数がnullを返した場合、マッピングは削除されます(最初から存在しない場合は、存在しないままです)。関数自体が(非チェック)例外をスローした場合、その例外は再スローされ、現在のマッピングは変更されません。
public V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
Mapnullの場合は削除します。このメソッドは、1つのキーに対する複数のマップされた値を結合するときに使用できます。たとえば、次のように、値のマッピングにString msgを作成または追加します。
map.merge(key, msg, String::concat)
関数がnullを返した場合、マッピングは削除されます。関数自体が(非チェック)例外をスローした場合、その例外は再スローされ、現在のマッピングは変更されません。
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.