JavaTM 2
Platform
Std. Ed. v1.4.0

java.util
クラス Hashtable

java.lang.Object
  |
  +--java.util.Dictionary
        |
        +--java.util.Hashtable
すべての実装インタフェース:
Cloneable, Map, Serializable
直系の既知のサブクラス:
Properties, UIDefaults

public class Hashtable
extends Dictionary
implements Map, Cloneable, Serializable

このクラスは、ハッシュテーブルを実装するためのもので、キーを値にマップします。null オブジェクト以外であれば、どのオブジェクトでもキーや値に使用することができます。

ハッシュテーブルにオブジェクトを格納したり、そこから取り出したりするには、キーとして使用するオブジェクトに、hashCode メソッドと equals メソッドが実装されていなければなりません。

Hashtable のインスタンスには、その性能に影響する「初期容量」および「負荷係数」という 2 つのパラメータがあります。「容量」はハッシュテーブルの「バケット」の数で、「初期容量」は単純にハッシュテーブルが作成される時点での容量です。ハッシュテーブルは「オープン」であることに注意してください。「ハッシュの衝突」という、1 つのバケットが複数のエントリを格納する現象があり、その場合それらのエントリはシーケンシャルサーチされることになります。「負荷係数」は、ハッシュテーブルの容量が自動的に増加する前にハッシュテーブルがどの程度いっぱいになるかの基準です。ハッシュテーブルのエントリ数が負荷係数と現在容量の積を超えると、rehash メソッドを呼び出すことによって容量を増やすことができます。

通常、デフォルトの負荷係数 (.75) では、時間コストとスペースコストの釣り合いを取ります。この値を大きくするとスペースのオーバーヘッドは減少しますが、エントリを参照するための時間のコストは増加し、get および put を含むほとんどの Hashtable オペレーションが影響を受けます。

初期容量により、浪費スペースと (時間のかかる) rehash オペレーションの需要との間の釣り合いが制御されます。初期容量が、Hashtable の格納するエントリの最大数を負荷係数で割った値より大きい場合、rehash オペレーションは起こりません。ただし、初期容量を高く設定しすぎると、スペースの浪費になります。

Hashtable に多くのエントリを入れる場合は、このテーブルを十分に大きな容量で作成する方が、必要に応じてハッシュを自動的にやり直してテーブルを大きくするよりも、エントリを効率的に挿入することができます。

この例は、数値のハッシュテーブルを作成するものです。この例では、数値の名前をキーとして使います。

     Hashtable numbers = new Hashtable();
     numbers.put("one", new Integer(1));
     numbers.put("two", new Integer(2));
     numbers.put("three", new Integer(3));

数値を取り出すには、次のコードを使います。

     Integer n = (Integer)numbers.get("two");
     if (n != null) {
         System.out.println("two = " + n);
     }

Java 2 プラットフォーム v1.2 では、このクラスは Map を実装するために改良されているため、Java Collections Framework の一部になります。新しいコレクションの実装とは異なり、Hashtable は同期をとります。

Hashtable のすべての「コレクションビューメソッド」によって返される Collection の iterator メソッドおよび listIterator メソッドによって返される Iterator は、「フェイルファスト」です。Iterator の作成後に、Iterator 自体の remove メソッドまたは add メソッド以外の方法で Hashtable が構造的に変更されると、Iterator は ConcurrentModificationException をスローします。したがって、同時変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、直ちにかつ手際よく例外をスローします。Hashtable のキーメソッドおよび値メソッドによって返される Enumerations は、フェイルファストではありません。

反復子のフェイルファスト動作は、そのままの状態を保証できません。一般的に、非同期の同時変更があるなかで保証することは不可能です。フェイルファスト反復子は、最善な状態で ConcurrentModificationException をスローします。反復子のフェイルファスト動作はバグの検出のためだけに使用します。

導入されたバージョン:
JDK1.0
関連項目:
Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, 直列化された形式

入れ子クラスの概要
 
クラス java.util.Map から継承した入れ子クラス
Map.Entry
 
コンストラクタの概要
Hashtable()
          デフォルトの初期容量 (11) と負荷係数 (0.75) で新規の空のハッシュテーブルを生成します。
Hashtable(int initialCapacity)
          指定された初期容量およびデフォルトの負荷係数 (0.75) で新しい空のハッシュテーブルを生成します。
Hashtable(int initialCapacity, float loadFactor)
          指定された初期容量と負荷係数で新しい空のハッシュテーブルを生成します。
Hashtable(Map t)
          指定された Map と同じマッピングで新しいハッシュテーブルを生成します。
 
メソッドの概要
 void clear()
          このハッシュテーブルを消去して、キーがない状態にします。
 Object clone()
          ハッシュテーブルのコピーを作成します。
 boolean contains(Object value)
          指定された値にマップされているキーが、ハッシュテーブルにあるかどうかを判定します。
 boolean containsKey(Object key)
          指定されたオブジェクトが、ハッシュテーブルのキーかどうかを判定します。
 boolean containsValue(Object value)
          Hashtable が 1 つまたは複数のキーをこの値にマッピングする場合に true を返します。
 Enumeration elements()
          ハッシュテーブルにある値のリストを返します。
 Set entrySet()
          Hashtable に格納されているエントリの Set ビューを返します。
 boolean equals(Object o)
          Map インタフェースでの定義に従って、指定された Object とこの Map を比較して等しいかどうかを判定します。
 Object get(Object key)
          指定されたキーにマップされている、ハッシュテーブルの値を返します。
 int hashCode()
          Map インタフェースの定義に従って、この Map のハッシュコード値を返します。
 boolean isEmpty()
          値にマップされているキーが、ハッシュテーブルにあるかどうかを判定します。
 Enumeration keys()
          ハッシュテーブルにあるキーのリストを返します。
 Set keySet()
          Hashtable に格納されているキーの Set ビューを返します。
 Object put(Object key, Object value)
          ハッシュテーブルにおいて、指定された key を、指定された value にマップします。
 void putAll(Map t)
          指定された Map から Hashtable にすべてのマッピングをコピーします。
protected  void rehash()
          ハッシュテーブルの容量を増やし、それを内部的に再編成して、エントリを調整してアクセスをより効率的にします。
 Object remove(Object key)
          キー (およびそれに対応する値) をハッシュテーブルから削除します。
 int size()
          ハッシュテーブルにあるキーの数を返します。
 String toString()
          Hashtable オブジェクトの文字列表現を、ASCII 文字「」(コンマとスペース) で区切られ括弧で囲んだエントリのセットの形式で返します。
 Collection values()
          Hashtable に格納されている値の 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 - 初期容量が 0 より小さい場合

Hashtable

public Hashtable()
デフォルトの初期容量 (11) と負荷係数 (0.75) で新規の空のハッシュテーブルを生成します。


Hashtable

public Hashtable(Map t)
指定された Map と同じマッピングで新しいハッシュテーブルを生成します。指定された Map のマッピングを保持するのに十分な初期容量、およびデフォルトの負荷係数 (0.75) で、ハッシュテーブルは作成されます。

パラメータ:
t - マッピングがこのマップに配置されるマップ
例外:
@exception - NullPointerException 指定されたマップが null の場合
導入されたバージョン:
1.2
メソッドの詳細

size

public int size()
ハッシュテーブルにあるキーの数を返します。

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

isEmpty

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

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

keys

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

定義:
クラス Dictionary 内の keys
戻り値:
ハッシュテーブルにあるキーのリスト
関連項目:
Enumeration, elements(), keySet(), Map

elements

public Enumeration elements()
ハッシュテーブルにある値のリストを返します。これらの要素を順次に取り出すには、Enumeration のメソッドを使用します。

定義:
クラス Dictionary 内の elements
戻り値:
ハッシュテーブルにある値のリスト
関連項目:
Enumeration, keys(), values(), Map

contains

public boolean contains(Object value)
指定された値にマップされているキーが、ハッシュテーブルにあるかどうかを判定します。この操作は、containsKey メソッドよりも負荷がかかります。

このメソッドは、機能の点で containsValue (コレクションフレームワークの Map インタフェースの一部) と同じです。

パラメータ:
value - 検索する値
戻り値:
あるキーが equals メソッドで決められている、ハッシュテーブルの value 引数にマッピングする場合は true、そうでない場合は false
例外:
NullPointerException - 値が null の場合
関連項目:
containsKey(Object), containsValue(Object), Map

containsValue

public boolean containsValue(Object value)
Hashtable が 1 つまたは複数のキーをこの値にマッピングする場合に true を返します。

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

定義:
インタフェース Map 内の containsValue
パラメータ:
value - ハッシュテーブルにあるかどうかを判定される値
戻り値:
マップが 1 つまたは複数のキーと指定された値をマッピングしている場合は true
導入されたバージョン:
1.2
関連項目:
Map

containsKey

public boolean containsKey(Object key)
指定されたオブジェクトが、ハッシュテーブルのキーかどうかを判定します。

定義:
インタフェース Map 内の containsKey
パラメータ:
key - 可能なキー
戻り値:
equals メソッドで決められているように、指定されたオブジェクトがこのハッシュテーブルのキーである場合は true、そうでない場合は false
関連項目:
contains(Object)

get

public Object get(Object key)
指定されたキーにマップされている、ハッシュテーブルの値を返します。

定義:
インタフェース Map 内の get
定義:
クラス Dictionary 内の get
パラメータ:
key - ハッシュテーブルのキー
戻り値:
指定されたキーにマップされているハッシュテーブルの値。指定されたキーにマップされている値がない場合は null
関連項目:
put(Object, Object)

rehash

protected void rehash()
ハッシュテーブルの容量を増やし、それを内部的に再編成して、エントリを調整してアクセスをより効率的にします。ハッシュテーブルにあるキーの数がハッシュテーブルの容量と負荷係数を超えると、このメソッドが自動的に呼び出されます。


put

public Object put(Object key,
                  Object value)
ハッシュテーブルにおいて、指定された key を、指定された value にマップします。キーや値は null にすることはできません。

この値は、元のキーと等しいキーを指定して get メソッドを呼び出すことによって取り出すことができます。

定義:
インタフェース Map 内の put
定義:
クラス Dictionary 内の put
パラメータ:
key - ハッシュテーブルキー
value - 値
戻り値:
ハッシュテーブルの指定されたキーの前の値。それがない場合は null
例外:
NullPointerException - キーまたは値が null の場合
関連項目:
Object.equals(Object), get(Object)

remove

public Object remove(Object key)
キー (およびそれに対応する値) をハッシュテーブルから削除します。そのキーがハッシュテーブルにない場合は、何も行いません。

定義:
インタフェース Map 内の remove
定義:
クラス Dictionary 内の remove
パラメータ:
key - 削除するキー
戻り値:
ハッシュテーブルでそのキーにマップされている値。マップされている値がない場合は null

putAll

public void putAll(Map t)
指定された Map から Hashtable にすべてのマッピングをコピーします。それらのマッピングは、指定された Map に現在あるキーに対して Hashtable が持っていたマッピングを置き換えます。

定義:
インタフェース Map 内の putAll
パラメータ:
t - マップに格納されるマッピング
例外:
@exception - NullPointerException 指定されたマップが null の場合
導入されたバージョン:
1.2

clear

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

定義:
インタフェース Map 内の clear

clone

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

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

toString

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

ObjecttoString メソッドにオーバーライドします。

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

keySet

public Set keySet()
Hashtable に格納されているキーの Set ビューを返します。Set は Hashtable を基にするので、Hashtable への変更は Set で反映され、逆に Set への変更は Hashtable で反映されます。Set は要素の削除 (Hashtable からの対応するエントリの削除) をサポートしますが、要素の追加はサポートしません。

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

entrySet

public Set entrySet()
Hashtable に格納されているエントリの Set ビューを返します。このコレクションの各要素は Map.Entry です。Set は Hashtable を基にするので、Hashtable への変更は Set で反映され、逆に Set への変更は Hashtable で反映されます。Set は要素の削除 (Hashtable からの対応するエントリの削除) をサポートしますが、要素の追加はサポートしません。

定義:
インタフェース Map 内の entrySet
戻り値:
マップ内に保持されているマッピングのセットビュー
導入されたバージョン:
1.2
関連項目:
Map.Entry

values

public Collection values()
Hashtable に格納されている値の Collection ビューを返します。Collection は Hashtable を基にするので、Hashtable への変更は Collection で反映され、逆に Collection への変更は Hashtable で反映されます。Collection は要素の削除 (Hashtable からの対応するエントリの削除) をサポートしますが、要素の追加はサポートしません。

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

equals

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

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

hashCode

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

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

JavaTM 2
Platform
Std. Ed. v1.4.0

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

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.