JavaTM Platform
Standard Ed. 6

java.util
クラス Hashtable<K,V>

java.lang.Object
  上位を拡張 java.util.Dictionary<K,V>
      上位を拡張 java.util.Hashtable<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 メソッド以外の方法でハッシュテーブルが構造的に変更されると、反復子は ConcurrentModificationException をスローします。このように、並行して変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。Hashtable のキーメソッドおよび要素メソッドによって返される Enumerations は、フェイルファストではありません。

通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、反復子のフェイルファストの動作を保証することはできません。フェイルファスト反復子は最善努力原則に基づき、ConcurrentModificationException をスローします。したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。「反復子のフェイルファストの動作はバグを検出するためにのみ使用すべきです。」

このクラスは、Java 2 プラットフォーム v1.2 の時点で Map インタフェースを実装するように改良された結果、Java Collections Framework のメンバーとなりました。新しいコレクションの実装とは異なり、Hashtable は同期をとります。

導入されたバージョン:
JDK1.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()
          ハッシュテーブルのコピーを作成します。
 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)
          指定されたキーがマップされている値を返します。
 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 ビューを返します。
 
クラス java.lang.Object から継承されたメソッド
finalize, getClass, notify, notifyAll, wait, wait, wait
 

コンストラクタの詳細

Hashtable

public Hashtable(int initialCapacity,
                 float loadFactor)
指定された初期容量と負荷係数で新しい空のハッシュテーブルを生成します。

パラメータ:
initialCapacity - ハッシュテーブルの初期容量
loadFactor - ハッシュテーブルの負荷係数
例外:
IllegalArgumentException - 初期容量が 0 より小さいか、負荷係数が正の値ではない場合

Hashtable

public Hashtable(int initialCapacity)
指定された初期容量およびデフォルトの負荷係数 (0.75) で新しい空のハッシュテーブルを生成します。

パラメータ:
initialCapacity - ハッシュテーブルの初期容量
例外:
IllegalArgumentException - 初期容量がゼロより小さい場合

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()
ハッシュテーブルにあるキーの数を返します。

定義:
インタフェース Map<K,V> 内の size
定義:
クラス Dictionary<K,V> 内の size
戻り値:
ハッシュテーブルにあるキーの数

isEmpty

public boolean isEmpty()
値にマップされているキーが、ハッシュテーブルにあるかどうかを判定します。

定義:
インタフェース Map<K,V> 内の isEmpty
定義:
クラス Dictionary<K,V> 内の isEmpty
戻り値:
値にマップされているキーがハッシュテーブルにない場合は true、ある場合は false

keys

public Enumeration<K> keys()
ハッシュテーブルにあるキーのリストを返します。

定義:
クラス 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)
このハッシュテーブルが 1 つまたは複数のキーをこの値にマッピングする場合に true を返します。

このメソッドは、機能の点で contains (Map インタフェースに先行する) と同じです。

定義:
インタフェース 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 にすることはできません。

この値は、元のキーと等しいキーを指定して 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

clear

public void clear()
このハッシュテーブルを消去して、キーがない状態にします。

定義:
インタフェース Map<K,V> 内の clear

clone

public Object clone()
ハッシュテーブルのコピーを作成します。ハッシュテーブルの構造自体はすべてコピーされますが、キーおよび値は複製されません。これは、比較的負担の大きい操作です。

オーバーライド:
クラス Object 内の clone
戻り値:
ハッシュテーブルの複製
関連項目:
Cloneable

toString

public String toString()
Hashtable オブジェクトの文字列表現を、ASCII 文字「」(コンマとスペース) で区切られ括弧で囲んだエントリのセットの形式で返します。各エントリはキー、等符号 =、および関連した要素として描画され、toString メソッドはキーおよび要素を文字列に変換するために使用されます。

オーバーライド:
クラス Object 内の toString
戻り値:
このハッシュテーブルの文字列表現

keySet

public Set<K> keySet()
このマップに含まれるキーの Set ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットの反復処理中にマップが変更された場合、反復処理の結果は定義されません (反復子自身の remove オペレーションを除く)。セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.removeSet.removeremoveAllretainAll、および retainAll オペレーションを通して行います。Set は、add オペレーションや addAll オペレーションはサポートしていません。

定義:
インタフェース Map<K,V> 内の keySet
戻り値:
マップに含まれているキーのセットビュー
導入されたバージョン:
1.2

entrySet

public Set<Map.Entry<K,V>> entrySet()
このマップに含まれるマップの Set ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットに対する反復の処理中にマップが変更された場合は、反復処理の結果は定義されません (反復子自身の remove オペレーション、または反復子により返されるマップエントリに対する setValue オペレーションを除く)。セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.removeSet.removeremoveAllretainAll、および clear の各オペレーションを通して行います。Set は、add オペレーションや addAll オペレーションはサポートしていません。

定義:
インタフェース Map<K,V> 内の entrySet
戻り値:
マップ内に保持されているマッピングのセットビュー
導入されたバージョン:
1.2

values

public Collection<V> values()
このマップに含まれる値の Collection ビューを返します。コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。コレクションの反復処理中にマップが変更された場合、反復処理の結果は定義されません (反復子自身の remove オペレーションを除く)。コレクションは要素の削除をサポートしており、対応するマッピングをマップから削除できます。 削除は、Iterator.removeCollection.removeremoveAllretainAll、および clear オペレーションを通して行います。Set は、add オペレーションや addAll オペレーションはサポートしていません。

定義:
インタフェース Map<K,V> 内の values
戻り値:
マップ内に含まれている値のコレクションビュー
導入されたバージョン:
1.2

equals

public boolean equals(Object o)
Map インタフェースでの定義に従って、指定された Object とこの Map を比較して等しいかどうかを判定します。

定義:
インタフェース Map<K,V> 内の equals
オーバーライド:
クラス Object 内の equals
パラメータ:
o - Hashtable と等しいかどうかを比較するオブジェクト
戻り値:
指定された Object がこの Map と等しい場合は true
導入されたバージョン:
1.2
関連項目:
Map.equals(Object)

hashCode

public int hashCode()
Map インタフェースの定義に従って、この Map のハッシュコード値を返します。

定義:
インタフェース Map<K,V> 内の hashCode
オーバーライド:
クラス Object 内の hashCode
戻り値:
このオブジェクトのハッシュコード値
導入されたバージョン:
1.2
関連項目:
Map.hashCode()

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。