|
Java プラットフォーム 1.2 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.util.AbstractMap | +--java.util.HashMap
Map インタフェースのハッシュテーブルに基づく実装です。この実装は、マップに関連するオプションのオペレーションをすべてサポートし、null 値および null キーを許容します。HashMap クラスは Hashtable と同じと見なしてもかまいませんが、HashMap の方は同期がとられず、null を許容します。このクラスは、マップの順序については保証しません。特に、ある期間に渡って一定の順序を保つことを保証しません。
この実装は、ハッシュ関数が複数のバケットで要素を適切に分散させることを想定し、基本オペレーション (get および put) で時間一定の性能を提供します。コレクションビューの繰り返し処理では、HashMap のインスタンスの「容量」(バケット数) とそのサイズ (キーと値のマッピングの数) の合計に比例した時間が必要です。したがって、繰り返し処理の性能が重要な場合は、初期容量をあまり高く (または負荷係数をあまり低く) 設定しないことが重要です。
HashMap のインスタンスには、その性能に影響を与える 2 つのパラメータ「初期容量」および「負荷係数」があります。「容量」はハッシュテーブルのバケット数であり、初期容量は単純にハッシュテーブルが作成された時点での容量です。「負荷係数」は、ハッシュテーブルがどの程度いっぱいになると、ハッシュテーブルの容量が自動的に増加されるかの基準です。ハッシュテーブルエントリ数が負荷係数と現在の容量の積を超えると、容量は rehash メソッドを呼び出すことで約 2 倍になります。
ほとんどの場合、デフォルトの負荷係数 (.75) は、時間コストとスペースコストの釣り合いがとれるようにします。この値を大きくすると、スペースのオーバーヘッドが減少しますが、参照コストが増加し、get および put を含む HashMap クラスのほとんどのオペレーションが影響を受けます。初期容量を設定するときは、rehash オペレーションの回数を最小限に抑えるために、マップのエントリ予定数および負荷係数を考慮する必要があります。初期容量が、エントリの最大数を負荷係数で割った値より大きい場合、rehash オペレーションは発生しません。
HashMap のインスタンスに多くのマッピングが格納される場合は、このテーブルの作成時に十分な大きさの容量を設定すると、必要に応じてハッシュを自動的にやり直してテーブルを大きくするよりも、マッピングをより効率的に格納できます。
この実装は同期化されません。複数のスレッドが同時にこのマップにアクセスし、それらのスレッドの少なくとも 1 つが構造的にマップを変更する場合には、外部で同期をとる必要があります。構造的な変更とは、1 つ以上のマッピングを追加または削除するオペレーションのことです。すでにインスタンスに格納されているキーに関連付けられている値を変更することは構造的な変更ではありません。通常、マップの同期をとるには、マップを自然にカプセル化するオブジェクトで同期をとります。そのようなオブジェクトがない場合には、Collections.synchronizedMap メソッドを使ってマップを「ラップ」します。これは、マップへの偶発的な非同期アクセスを防ぐために、作成時に行うのが最適です。
Map m = Collections.synchronizedMap(new HashMap(...));
このクラスのすべての「コレクションビューメソッド」によって返される反復子は、「フェイルファスト」です。反復子の作成後に、反復子自体の remove メソッドまたは add メソッド以外の方法でマップを構造的に変更すると、反復子は ConcurrentModificationException をスローします。したがって、同時変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、速やかにかつクリーンに失敗します。
Object.hashCode()
,
Collection
,
Map
,
TreeMap
,
Hashtable
, 直列化された形式コンストラクタの概要 | |
HashMap()
デフォルトの容量と負荷係数 (0.75) で新しい空のマップを作成します。 |
|
HashMap(int initialCapacity)
指定された初期容量およびデフォルトの負荷係数 (0.75) で新しい空のマップを作成します。 |
|
HashMap(int initialCapacity,
float loadFactor)
指定された初期容量および指定された負荷係数で、新しい空のマップを作成します。 |
|
HashMap(Map t)
指定されたマップと同じマッピングで新しいマップを作成します。 |
メソッドの概要 | |
void |
clear()
マップからすべてのマッピングを削除します。 |
Object |
clone()
HashMap のインスタンスのシャローコピーを返します。 |
boolean |
containsKey(Object key)
マップが指定されたキーのマッピングを格納している場合に true を返します。 |
boolean |
containsValue(Object value)
マップが 1 つまたは複数のキーと指定された値をマッピングしている場合に true を返します。 |
Set |
entrySet()
マップに格納されているマッピングのコレクションビューを返します。 |
Object |
get(Object key)
マップが指定されたキーにマップする値を返します。 |
boolean |
isEmpty()
マップがキーと値のマッピングを持たない場合に true を返します。 |
Set |
keySet()
マップに格納されているキーのセットビューを返します。 |
Object |
put(Object key,
Object value)
指定された値を、マップの指定されたキーに関連付けます。 |
void |
putAll(Map t)
指定されたマップからこのマップにすべてのマッピングをコピーします。 |
Object |
remove(Object key)
キーに対するマッピングがあれば、そのキーをマップから削除します。 |
int |
size()
マップにあるキーと値のマッピングの数を返します。 |
Collection |
values()
マップに格納されている値のコレクションビューを返します。 |
クラス java.util.AbstractMap から継承したメソッド |
equals,
hashCode,
toString |
クラス java.lang.Object から継承したメソッド |
finalize,
getClass,
notify,
notifyAll,
wait,
wait,
wait |
コンストラクタの詳細 |
public HashMap(int initialCapacity, float loadFactor)
initialCapacity
- HashMap の初期容量loadFactor
- HashMap の負荷係数public HashMap(int initialCapacity)
initialCapacity
- HashMap の初期容量public HashMap()
public HashMap(Map t)
メソッドの詳細 |
public int size()
public boolean isEmpty()
public boolean containsValue(Object value)
value
- マップにあるかどうかが判定される値public boolean containsKey(Object key)
key
- Map にあるかどうかが判定されるキーpublic Object get(Object key)
key
- 関連付けられている値が返されるキーpublic Object put(Object key, Object value)
key
- 指定された値が関連付けられるキーvalue
- 指定されたキーに関連付けられる値public Object remove(Object key)
key
- マップからマッピングを削除するキーpublic void putAll(Map t)
t
- このマップに格納されるマッピングpublic void clear()
public Object clone()
public Set keySet()
public Collection values()
public Set entrySet()
Map.Entry
|
Java プラットフォーム 1.2 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |