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()
ハッシュテーブルのコピーを作成します。
|
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 |
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 ビューを返します。 |
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()
, Map
public Enumeration<V> elements()
elements
、クラス: Dictionary<K,V>
Enumeration
, keys()
, values()
, Map
public 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
- 関連付けられた値が返されるキーnull
NullPointerException
- 指定されたキーが 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
- 値null
NullPointerException
キーまたは値が null
の場合Object.equals(Object)
, get(Object)
public V remove(Object key)
remove
、インタフェース: Map<K,V>
remove
、クラス: Dictionary<K,V>
key
- 削除するキーnull
NullPointerException
- キーが 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)
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.