|
Java プラットフォーム 1.2 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.util.Dictionary | +--java.util.Hashtable
このクラスは、ハッシュテーブルを実装するためのもので、キーを値にマップします。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); }
JDK1.2 では、このクラスは Map を実装するために改良されているため、Java Collections Framework の一部になります。新しいコレクションの実装とは異なり、Hashtable は同期をとります。
Hashtable のすべての「コレクションビューメソッド」によって返される Collection の iterator メソッドおよび listIterator メソッドによって返される Iterator は、「フェイルファスト」です。Iterator の作成後に、Iterator 自体の remove メソッドまたは add メソッド以外の方法で Hashtable が構造的に変更されると、Iterator は ConcurrentModificationException をスローします。したがって、同時変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、速やかにかつクリーンに失敗します。Hashtable のキーメソッドおよび値メソッドによって返される Enumerations は、フェイルファストではありません。
Object.equals(java.lang.Object)
,
Object.hashCode()
,
rehash()
,
Collection
,
Map
,
HashMap
,
TreeMap
, 直列化された形式コンストラクタの概要 | |
Hashtable()
デフォルトの容量および負荷係数 (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 |
コンストラクタの詳細 |
public Hashtable(int initialCapacity, float loadFactor)
initialCapacity
- ハッシュテーブルの初期容量loadFactor
- ハッシュテーブルの負荷係数public Hashtable(int initialCapacity)
initialCapacity
- ハッシュテーブルの初期容量public Hashtable()
public Hashtable(Map t)
メソッドの詳細 |
public int size()
public boolean isEmpty()
true
、ある場合は false
public Enumeration keys()
Enumeration
,
elements()
,
keySet()
,
Map
public Enumeration elements()
Enumeration
,
keys()
,
values()
,
Map
public boolean contains(Object value)
containsKey
メソッドよりも負荷がかかります。
このメソッドは、機能の点で containsValue (コレクションフレームワークの Map インタフェースの一部) と同じです。
value
- 検索する値value
引数とマッピングする場合は true
、そうでない場合は false
null
の場合containsKey(Object)
,
containsValue(Object)
,
Map
public boolean containsValue(Object value)
このメソッドは、機能の点で contains (Map インタフェースに先行する) と同じです。
value
- この Hashtable にあることが判定される値Map
public boolean containsKey(Object key)
key
- 調べるキーtrue
、そうでない場合は false
contains(Object)
public Object get(Object key)
key
- ハッシュテーブルのキーnull
put(Object, Object)
protected void rehash()
public Object put(Object key, Object value)
key
を、指定された value
にマップします。 キーや値は null
であってはなりません。
この値は、元のキーと等しいキーを指定して get
メソッドを呼び出すことによって取り出すことができます。
key
- ハッシュテーブルのキーvalue
- 値null
null
の場合Object.equals(Object)
,
get(Object)
public Object remove(Object key)
key
- 削除するキーnull
public void putAll(Map t)
public void clear()
public Object clone()
public String toString()
Object の toString メソッドにオーバーライドします。
public Set keySet()
public Set entrySet()
Map.Entry
public Collection values()
public boolean equals(Object o)
Map.equals(Object)
public int hashCode()
Map.hashCode()
|
Java プラットフォーム 1.2 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |