|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.util.Dictionary<K,V> java.util.Hashtable<K,V>
public class Hashtable<K,V>
このクラスは、ハッシュテーブルを実装するためのもので、キーを値にマップします。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
は同期をとります。
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 |
コンストラクタの詳細 |
---|
public Hashtable(int initialCapacity, float loadFactor)
initialCapacity
- ハッシュテーブルの初期容量loadFactor
- ハッシュテーブルの負荷係数
IllegalArgumentException
- 初期容量が 0 より小さいか、負荷係数が正の値ではない場合public Hashtable(int initialCapacity)
initialCapacity
- ハッシュテーブルの初期容量
IllegalArgumentException
- 初期容量が 0 より小さい場合public Hashtable()
public Hashtable(Map<? extends K,? extends V> t)
t
- マッピングがこのマップに配置されるマップ
NullPointerException
- 指定されたマップが null の場合メソッドの詳細 |
---|
public int size()
Map<K,V>
内の size
Dictionary<K,V>
内の size
public boolean isEmpty()
Map<K,V>
内の isEmpty
Dictionary<K,V>
内の isEmpty
true
、そうでない場合は false
public Enumeration<K> keys()
Dictionary<K,V>
内の keys
Enumeration
,
elements()
,
keySet()
,
Map
public Enumeration<V> elements()
Dictionary<K,V>
内の elements
Enumeration
,
keys()
,
values()
,
Map
public boolean contains(Object value)
containsKey
メソッドよりも負荷がかかります。
このメソッドは、機能の点で containsValue
(コレクションフレームワークの Map
インタフェースの一部) と同じです。
value
- 検索する値
value
引数にマッピングする場合は true
、そうでない場合は false
NullPointerException
- 値が null
の場合public boolean containsValue(Object value)
このメソッドは、機能の点で contains
(Map
インタフェースに先行する) と同じです。
Map<K,V>
内の containsValue
value
- ハッシュテーブルにあるかどうかを判定される値
NullPointerException
- 値が null
の場合public boolean containsKey(Object key)
Map<K,V>
内の containsKey
key
- 可能なキー
true
、そうでない場合は false
NullPointerException
- キーが null
の場合contains(Object)
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)
protected void rehash()
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)
public V remove(Object key)
Map<K,V>
内の remove
Dictionary<K,V>
内の remove
key
- 削除するキー
null
NullPointerException
- キーが null
の場合public void putAll(Map<? extends K,? extends V> t)
Map<K,V>
内の putAll
t
- マップに格納されるマッピング
NullPointerException
- 指定されたマップが null の場合public void clear()
Map<K,V>
内の clear
public Object clone()
Object
内の clone
Cloneable
public String toString()
Object
内の toString
public Set<K> keySet()
Set
ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットの反復処理中にマップが変更された場合、反復処理の結果は定義されません (反復子自身の remove オペレーションを除く)。セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove、Set.remove、removeAll、retainAll、および retainAll オペレーションを通して行います。Set は、add オペレーションや addAll オペレーションはサポートしていません。
Map<K,V>
内の keySet
public Set<Map.Entry<K,V>> entrySet()
Set
ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットに対する反復の処理中にマップが変更された場合は、反復処理の結果は定義されません (反復子自身の remove オペレーション、または反復子により返されるマップエントリに対する setValue オペレーションを除く)。 セットは、要素の削除をサポートしており、対応するマッピングをマップから削除できます。セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove、Set.remove、removeAll、retainAll、および clear の各オペレーションを通して行います。Set は、add オペレーションや addAll オペレーションはサポートしていません。
Map<K,V>
内の entrySet
public Collection<V> values()
Collection
ビューを返します。コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。コレクションの反復処理中にマップが変更された場合、反復処理の結果は定義されません (反復子自身の remove オペレーションを除く)。コレクションは要素の削除をサポートしており、対応するマッピングをマップから削除できます。 削除は、Iterator.remove、Collection.remove、removeAll、retainAll、および clear オペレーションを通して行います。コレクションは、add オペレーションや addAll オペレーションはサポートしていません。
Map<K,V>
内の values
public boolean equals(Object o)
Map<K,V>
内の equals
Object
内の equals
o
- Hashtable と等しいかどうかを比較するオブジェクト
Map.equals(Object)
public int hashCode()
Map<K,V>
内の hashCode
Object
内の hashCode
Map.hashCode()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。