|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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 をスローします。したがって、同時変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、直ちにかつ手際よく例外をスローします。
反復子のフェイルファスト動作は、そのままの状態を保証できません。一般的に、非同期の同時変更があるなかで保証することは不可能です。フェイルファスト反復子は、最善な状態で ConcurrentModificationException をスローします。反復子のフェイルファスト動作はバグの検出のためだけに使用します。
Object.hashCode()
,
Collection
,
Map
,
TreeMap
,
Hashtable
,
直列化された形式入れ子クラスの概要 |
クラス java.util.Map から継承した入れ子クラス |
Map.Entry |
コンストラクタの概要 | |
HashMap()
デフォルトの初期容量 (16) とデフォルトの負荷係数 (0.75) で空の HashMap を作成します。 |
|
HashMap(int initialCapacity)
指定された初期容量とデフォルトの負荷係数 (0.75) で空の HashMap を作成します。 |
|
HashMap(int initialCapacity,
float loadFactor)
指定された初期容量と負荷係数で空の HashMap を作成します。 |
|
HashMap(Map m)
指定された Map と同じマッピングで新規 HashMap を作成します。 |
メソッドの概要 | |
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 |
インタフェース java.util.Map から継承したメソッド |
equals, hashCode |
コンストラクタの詳細 |
public HashMap(int initialCapacity, float loadFactor)
initialCapacity
- 初期容量loadFactor
- 負荷係数
IllegalArgumentException
- 初期容量が負であるか、負荷係数が正ではない場合public HashMap(int initialCapacity)
initialCapacity
- 初期容量
IllegalArgumentException
- 初期容量が負の場合public HashMap()
public HashMap(Map m)
m
- マッピングがこのマップに配置されるマップ
NullPointerException
- 指定されたマップが null の場合メソッドの詳細 |
public int size()
Map
内の size
AbstractMap
内の size
public boolean isEmpty()
Map
内の isEmpty
AbstractMap
内の isEmpty
public Object get(Object key)
Map
内の get
AbstractMap
内の get
key
- 関連付けられた値が返されるキー
put(Object, Object)
public boolean containsKey(Object key)
Map
内の containsKey
AbstractMap
内の containsKey
key
- マップにあるかどうかが判定されるキー
public Object put(Object key, Object value)
Map
内の put
AbstractMap
内の put
key
- 指定される値が関連付けられるキーvalue
- 指定されるキーに関連付けられる値
public void putAll(Map t)
Map
内の putAll
AbstractMap
内の putAll
t
- マップに格納されるマッピング
NullPointerException
- 指定されたマップが null の場合public Object remove(Object key)
Map
内の remove
AbstractMap
内の remove
key
- マッピングがマップから削除されるキー
public void clear()
Map
内の clear
AbstractMap
内の clear
public boolean containsValue(Object value)
Map
内の containsValue
AbstractMap
内の containsValue
value
- マップにあるかどうかを判定される値
public Object clone()
AbstractMap
内の clone
public Set keySet()
Map
内の keySet
AbstractMap
内の keySet
public Collection values()
Map
内の values
AbstractMap
内の values
public Set entrySet()
Map
内の entrySet
AbstractMap
内の entrySet
Map.Entry
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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.