|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.util.AbstractMap<K,V> java.util.HashMap<K,V>
K
- このマップで保持されるキーの型V
- マップされる値の型public class HashMap<K,V>
Map インタフェースのハッシュテーブルに基づく実装です。この実装は、マップに関連するオプションのオペレーションをすべてサポートし、null 値および null キーを使用できます。HashMap クラスは Hashtable と同じとみなしてもかまいませんが、HashMap の方は同期がとられず、null の場合もあります。このクラスはマップの順序を保証しません。 特に、その順序を常に一定に保つことを保証しません。
この実装は、ハッシュ関数が複数のバケットで要素を適切に分散させることを想定し、基本オペレーション (get および put) で一定時間の性能を提供します。コレクションビューの繰り返し処理では、HashMap のインスタンスの「容量」(バケット数) とそのサイズ (キーと値のマッピングの数) の合計に比例した時間が必要です。したがって、繰り返し処理の性能が重要な場合は、初期容量をあまり高く (負荷係数をあまり低く) 設定しないことが非常に重要です。
HashMap のインスタンスには、その性能に影響を与える 2 つのパラメータ「初期容量」および「負荷係数」があります。「容量」はハッシュテーブルのバケット数であり、初期容量は単純にハッシュテーブルが作成された時点での容量です。「負荷係数」は、ハッシュテーブルの容量が自動的に増加する前にハッシュテーブルがどの程度いっぱいになるかの基準です。ハッシュテーブルエントリ数が負荷係数と現在の容量の積を超えると、ハッシュテーブルのハッシュがやり直され (つまり、内部データ構造が再構築され)、ハッシュテーブルのバケット数は約 2 倍になります。
ほとんどの場合、デフォルトの負荷係数 (.75) では、時間コストとスペースコストの釣り合いを取ります。この値を大きくすると、スペースのオーバーヘッドが減少しますが、参照コストが増加し、get および put を含む HashMap クラスのほとんどのオペレーションが影響を受けます。初期容量を設定するときは、rehash オペレーションの回数を最小限に抑えるために、マップのエントリ予定数および負荷係数を考慮する必要があります。初期容量が、エントリの最大数を負荷係数で割った値より大きい場合、rehash オペレーションは起こりません。
HashMap のインスタンスに多くのマッピングが格納される場合は、このテーブルの作成時に十分な大きさの容量を設定すると、必要に応じてハッシュを自動的にやり直してテーブルを大きくするよりも、マッピングをより効率的に格納できます。
この実装は同期化されません。複数のスレッドが並行してハッシュマップにアクセスし、それらのスレッドの少なくとも 1 つが構造的にマップを変更する場合には、外部で同期をとる必要があります。構造的な変更とは、1 つ以上のマッピングを追加または削除するオペレーションのことです。すでにインスタンスに格納されているキーに関連付けられた値を変更することは構造的な変更ではありません。通常、構造的な変更は、マップを自然にカプセル化する特定のオブジェクトで同期をとることによって達成されます。
この種のオブジェクトがない場合には、Collections.synchronizedMap
メソッドを使用してマップを「ラップ」する必要があります。マップへの偶発的な非同期アクセスを防ぐために、作成時に行うのが最適です。
Map m = Collections.synchronizedMap(new HashMap(...));
このクラスの「コレクションビューメソッド」によって返される反復子は「フェイルファスト」です。反復子の作成後に、反復子自体の remove メソッド以外の方法でマップが構造的に変更されると、反復子は ConcurrentModificationException
をスローします。このように、並行して変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。
通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、反復子のフェイルファストの動作を保証することはできません。フェイルファスト反復子は最善努力原則に基づき、ConcurrentModificationException をスローします。したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。「反復子のフェイルファストの動作はバグを検出するためにのみ使用すべきです」。
このクラスは、Java Collections Framework のメンバーです。
Object.hashCode()
,
Collection
,
Map
,
TreeMap
,
Hashtable
,
直列化された形式入れ子のクラスの概要 |
---|
クラス java.util.AbstractMap から継承された入れ子のクラス/インタフェース |
---|
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V> |
コンストラクタの概要 | |
---|---|
HashMap()
デフォルトの初期容量 (16) とデフォルトの負荷係数 (0.75) で空の HashMap を作成します。 |
|
HashMap(int initialCapacity)
指定された初期容量とデフォルトの負荷係数 (0.75) で空の HashMap を作成します。 |
|
HashMap(int initialCapacity,
float loadFactor)
指定された初期容量と負荷係数で空の HashMap を作成します。 |
|
HashMap(Map<? extends K,? extends V> m)
指定された Map と同じマッピングで新規 HashMap を作成します。 |
メソッドの概要 | |
---|---|
void |
clear()
すべてのマッピングをマップから削除します。 |
Object |
clone()
HashMap のインスタンスのシャローコピーを返します。 |
boolean |
containsKey(Object key)
マップが指定のキーのマッピングを保持する場合に true を返します。 |
boolean |
containsValue(Object value)
マップが 1 つまたは複数のキーと指定された値をマッピングしている場合に true を返します。 |
Set<Map.Entry<K,V>> |
entrySet()
このマップに含まれるマップの Set ビューを返します。 |
V |
get(Object key)
指定されたキーがマップされている値を返します。 |
boolean |
isEmpty()
マップがキーと値のマッピングを保持しない場合に true を返します。 |
Set<K> |
keySet()
このマップに含まれるキーの Set ビューを返します。 |
V |
put(K key,
V value)
指定された値と指定されたキーをこのマップに関連付けます。 |
void |
putAll(Map<? extends K,? extends V> m)
指定されたマップからすべてのマッピングをマップにコピーします。 |
V |
remove(Object key)
指定されたキーのマッピングがあればマップから削除します。 |
int |
size()
マップ内のキー値マッピングの数を返します。 |
Collection<V> |
values()
このマップに含まれる値の Collection ビューを返します。 |
クラス 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<? extends K,? extends V> m)
m
- マッピングがこのマップに配置されるマップ
NullPointerException
- 指定されたマップが null の場合メソッドの詳細 |
---|
public int size()
Map<K,V>
内の size
AbstractMap<K,V>
内の size
public boolean isEmpty()
Map<K,V>
内の isEmpty
AbstractMap<K,V>
内の isEmpty
public V get(Object key)
null
を返します。
つまり、このメソッドは、(key==null ? k==null : key.equals(k))
となるキー k
から値 v
へのマッピングがこのマップに含まれている場合は v
を返し、それ以外の場合は null
を返します。このようなマッピングが 1 つだけあります。
戻り値の null
は、マップがキーのマッピングを保持していないことを示すとはかぎりません。 つまり、マップが明示的にキーを null
にマップすることもあります。containsKey
オペレーションを使うと、この 2 つの場合を区別できます。
Map<K,V>
内の get
AbstractMap<K,V>
内の get
key
- 関連付けられた値が返されるキー
null
put(Object, Object)
public boolean containsKey(Object key)
Map<K,V>
内の containsKey
AbstractMap<K,V>
内の containsKey
key
- マップにあるかどうかが判定されるキー
public V put(K key, V value)
Map<K,V>
内の put
AbstractMap<K,V>
内の put
key
- 指定された値が関連付けられるキーvalue
- 指定されたキーに関連付けられる値
public void putAll(Map<? extends K,? extends V> m)
Map<K,V>
内の putAll
AbstractMap<K,V>
内の putAll
m
- マップに格納されるマッピング
NullPointerException
- 指定されたマップが null の場合public V remove(Object key)
Map<K,V>
内の remove
AbstractMap<K,V>
内の remove
key
- マッピングがマップから削除されるキー
public void clear()
Map<K,V>
内の clear
AbstractMap<K,V>
内の clear
public boolean containsValue(Object value)
Map<K,V>
内の containsValue
AbstractMap<K,V>
内の containsValue
value
- マップにあるかどうかを判定される値
public Object clone()
AbstractMap<K,V>
内の clone
Cloneable
public Set<K> keySet()
Set
ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットの反復処理中にマップが変更された場合、反復処理の結果は定義されません (反復子自身の remove オペレーションを除く)。セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove、Set.remove、removeAll、retainAll、および retainAll オペレーションを通して行います。Set は、add オペレーションや addAll オペレーションはサポートしていません。
Map<K,V>
内の keySet
AbstractMap<K,V>
内の keySet
public Collection<V> values()
Collection
ビューを返します。コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。コレクションの反復処理中にマップが変更された場合、反復処理の結果は定義されません (反復子自身の remove オペレーションを除く)。コレクションは要素の削除をサポートしており、対応するマッピングをマップから削除できます。 削除は、Iterator.remove、Collection.remove、removeAll、retainAll、および clear オペレーションを通して行います。コレクションは、add オペレーションや addAll オペレーションはサポートしていません。
Map<K,V>
内の values
AbstractMap<K,V>
内の values
public Set<Map.Entry<K,V>> entrySet()
Set
ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットに対する反復の処理中にマップが変更された場合は、反復処理の結果は定義されません (反復子自身の remove オペレーション、または反復子により返されるマップエントリに対する setValue オペレーションを除く)。 セットは、要素の削除をサポートしており、対応するマッピングをマップから削除できます。セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove、Set.remove、removeAll、retainAll、および clear の各オペレーションを通して行います。Set は、add オペレーションや addAll オペレーションはサポートしていません。
Map<K,V>
内の entrySet
AbstractMap<K,V>
内の entrySet
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。