Java プラットフォーム 1.2

java.util
クラス HashMap

java.lang.Object
  |
  +--java.util.AbstractMap
        |
        +--java.util.HashMap

public class HashMap
extends AbstractMap
implements Map, Cloneable, Serializable

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 をスローします。したがって、同時変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、速やかにかつクリーンに失敗します。

導入されたバージョン:
JDK1.2
関連項目:
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
 

コンストラクタの詳細

HashMap

public HashMap(int initialCapacity,
               float loadFactor)
指定された初期容量および指定された負荷係数で、新しい空のマップを作成します。
パラメータ:
initialCapacity - HashMap の初期容量
loadFactor - HashMap の負荷係数
例外:
IllegalArgumentException - 初期容量が 0 より小さい場合、あるいは負荷係数が正の値でない場合

HashMap

public HashMap(int initialCapacity)
指定された初期容量およびデフォルトの負荷係数 (0.75) で新しい空のマップを作成します。
パラメータ:
initialCapacity - HashMap の初期容量
例外:
IllegalArgumentException - 初期容量が 0 より小さい場合

HashMap

public HashMap()
デフォルトの容量と負荷係数 (0.75) で新しい空のマップを作成します。

HashMap

public HashMap(Map t)
指定されたマップと同じマッピングで新しいマップを作成します。マップは、指定されたマップにあるマッピング数の 2 倍の容量または 11 (どちらか大きい方)、およびデフォルトの負荷係数 (0.75) で作成されます。
メソッドの詳細

size

public int size()
マップにあるキーと値のマッピングの数を返します。
定義:
インタフェース Map 内の size
戻り値:
このマップにあるキーと値のマッピングの数
オーバーライド:
クラス AbstractMap 内の size

isEmpty

public boolean isEmpty()
マップがキーと値のマッピングを持たない場合に true を返します。
定義:
インタフェース Map 内の isEmpty
戻り値:
このマップがキーと値のマッピングを持たない場合は true
オーバーライド:
クラス AbstractMap 内の isEmpty

containsValue

public boolean containsValue(Object value)
マップが 1 つまたは複数のキーと指定された値をマッピングしている場合に true を返します。
定義:
インタフェース Map 内の containsValue
パラメータ:
value - マップにあるかどうかが判定される値
戻り値:
マップが 1 つまたは複数のキーを指定された値とマッピングしている場合は true
オーバーライド:
クラス AbstractMap 内の containsValue

containsKey

public boolean containsKey(Object key)
マップが指定されたキーのマッピングを格納している場合に true を返します。
定義:
インタフェース Map 内の containsKey
パラメータ:
key - Map にあるかどうかが判定されるキー
戻り値:
マップが指定されたキーのマッピングを格納している場合は true
オーバーライド:
クラス AbstractMap 内の containsKey

get

public Object get(Object key)
マップが指定されたキーにマップする値を返します。マップがこのキーのマッピングを格納していない場合は null を返します。戻り値 null は、マップがキーのマッピングを格納していないことを示すとはかぎりません。マップが明示的にキーに対して null をマップしている可能性もあります。containsKey オペレーションを使用すると、これら 2 つのケースを区別できます。
定義:
インタフェース Map 内の get
パラメータ:
key - 関連付けられている値が返されるキー
戻り値:
マップが指定されたキーとマップする値
オーバーライド:
クラス AbstractMap 内の get

put

public Object put(Object key,
                  Object value)
指定された値を、マップの指定されたキーに関連付けます。マップがこのキーのマッピングをすでに格納している場合、古い値は置き換えられます。
定義:
インタフェース Map 内の put
パラメータ:
key - 指定された値が関連付けられるキー
value - 指定されたキーに関連付けられる値
戻り値:
指定されたキーに関連付けられていた値。または、キーのマッピングがなかった場合は null。戻り値 null は、HashMap が以前に null と指定されたキーを関連付けていたことを示す場合もある
オーバーライド:
クラス AbstractMap 内の put

remove

public Object remove(Object key)
キーに対するマッピングがあれば、そのキーをマップから削除します。
定義:
インタフェース Map 内の remove
パラメータ:
key - マップからマッピングを削除するキー
戻り値:
指定されたキーに関連付けられていた値。キーのマッピングがなかった場合は null。戻り値 null は、マップが以前に null と指定されたキーを関連付けていたことを示す場合もある
オーバーライド:
クラス AbstractMap 内の remove

putAll

public void putAll(Map t)
指定されたマップからこのマップにすべてのマッピングをコピーします。これらのマッピングにより、指定された Map に現存するキーに対してこのマップがすでに持っているマッピングが置き換えられます。
定義:
インタフェース Map 内の putAll
パラメータ:
t - このマップに格納されるマッピング
オーバーライド:
クラス AbstractMap 内の putAll

clear

public void clear()
マップからすべてのマッピングを削除します。
定義:
インタフェース Map 内の clear
オーバーライド:
クラス AbstractMap 内の clear

clone

public Object clone()
HashMap のインスタンスのシャローコピーを返します。キーと値は、それ自体は複製されません。
戻り値:
このマップのシャローコピー
オーバーライド:
クラス Object 内の clone

keySet

public Set keySet()
マップに格納されているキーのセットビューを返します。セットはマップを基にするので、マップへの変更はセットで反映され、逆にセットへの変更はマップで反映されます。セットは、Iterator.removeSet.removeremoveAllretainAll、および clear の各オペレーションにより、マップから対応するマッピングを削除する要素削除処理をサポートします。add オペレーションと addAll オペレーションは、セットではサポートされません。
定義:
インタフェース Map 内の keySet
戻り値:
マップに格納されているキーのセットビュー
オーバーライド:
クラス AbstractMap 内の keySet

values

public Collection values()
マップに格納されている値のコレクションビューを返します。コレクションはマップを基にするので、マップへの変更はコレクションで反映され、逆にコレクションでの変更はマップで反映されます。コレクションは、Iterator.removeCollection.removeremoveAllretainAll、および clear オペレーションにより、マップから対応するマッピングを削除する要素削除処理をサポートします。add オペレーションと addAll オペレーションは、コレクションではサポートされません。
定義:
インタフェース Map 内の values
戻り値:
マップに格納されている値のコレクションビュー
オーバーライド:
クラス AbstractMap 内の values

entrySet

public Set entrySet()
マップに格納されているマッピングのコレクションビューを返します。返されたコレクションの各要素は Map.Entry です。コレクションはマップを基にするので、マップへの変更はコレクションで反映され、逆にコレクションへの変更はマップで反映されます。コレクションは、Iterator.removeCollection.removeremoveAllretainAll、および clear の各オペレーションにより、マップから対応するマッピングを削除する要素削除処理をサポートします。add オペレーションと addAll オペレーションは、コレクションではサポートされません。
定義:
インタフェース Map 内の entrySet
戻り値:
マップに格納されているマッピングのコレクションビュー
オーバーライド:
クラス AbstractMap 内の entrySet
関連項目:
Map.Entry

Java プラットフォーム 1.2

バグや機能要求の報告
新しい javadoc の表示についてのコメントやご提案
Java は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-1998 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.