JavaTM 2 Platform
Standard Ed. 5.0

java.util
クラス HashMap<K,V>

java.lang.Object
  上位を拡張 java.util.AbstractMap<K,V>
      上位を拡張 java.util.HashMap<K,V>
すべての実装されたインタフェース:
Serializable, Cloneable, Map<K,V>
直系の既知のサブクラス:
LinkedHashMap, PrinterStateReasons

public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, 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 をスローします。したがって、同時変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。

通常、非同期の同時変更がある場合、確かな保証を行うことは不可能なので、反復子のフェイルファストの動作を保証することはできません。フェイルファスト反復子は最善努力原則に基づき、ConcurrentModificationException をスローします。したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。「反復子のフェイルファストの動作はバグを検出するためにのみ使用すべきです」

このクラスは、Java Collections Framework のメンバです。

導入されたバージョン:
1.2
関連項目:
Object.hashCode(), Collection, Map, TreeMap, Hashtable, 直列化された形式

コンストラクタの概要
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()
          マップに格納されているマッピングのコレクションビューを返します。
 V get(Object key)
          この識別情報ハッシュマップで指定されたキーにマップされている値を返します。
 boolean isEmpty()
          マップがキーと値のマッピングを保持しない場合に true を返します。
 Set<K> keySet()
          マップに格納されているキーのセットビューを返します。
 V put(K key, V value)
          指定された値と指定されたキーをこのマップに関連付けます。
 void putAll(Map<? extends K,? extends V> m)
          指定されたマップからすべてのマッピングをマップにコピーします。
 V remove(Object key)
          キーに対するマッピングがあれば、そのキーをマップから削除します。
 int size()
          マップ内のキーと値のマッピングの数を返します。
 Collection<V> values()
          マップに格納されている値のコレクションビューを返します。
 
クラス java.util.AbstractMap から継承されたメソッド
equals, hashCode, toString
 
クラス java.lang.Object から継承されたメソッド
finalize, getClass, notify, notifyAll, wait, wait, wait
 
インタフェース java.util.Map から継承されたメソッド
equals, hashCode
 

コンストラクタの詳細

HashMap

public HashMap(int initialCapacity,
               float loadFactor)
指定された初期容量と負荷係数で空の HashMap を作成します。

パラメータ:
initialCapacity - 初期容量
loadFactor - 負荷係数
例外:
IllegalArgumentException - 初期容量が負であるか、負荷係数が正ではない場合

HashMap

public HashMap(int initialCapacity)
指定された初期容量とデフォルトの負荷係数 (0.75) で空の HashMap を作成します。

パラメータ:
initialCapacity - 初期容量
例外:
IllegalArgumentException - 初期容量が負の場合

HashMap

public HashMap()
デフォルトの初期容量 (16) とデフォルトの負荷係数 (0.75) で空の HashMap を作成します。


HashMap

public HashMap(Map<? extends K,? extends V> m)
指定された Map と同じマッピングで新規 HashMap を作成します。デフォルトの負荷係数 (0.75)、および指定された Map のマッピングを保持するのに十分な初期容量で、HashMap は作成されます。

パラメータ:
m - マッピングがこのマップに配置されるマップ
例外:
NullPointerException - 指定されたマップが null の場合
メソッドの詳細

size

public int size()
マップ内のキーと値のマッピングの数を返します。

定義:
インタフェース Map<K,V> 内の size
オーバーライド:
クラス AbstractMap<K,V> 内の size
戻り値:
マップ内のキーと値のマッピングの数

isEmpty

public boolean isEmpty()
マップがキーと値のマッピングを保持しない場合に true を返します。

定義:
インタフェース Map<K,V> 内の isEmpty
オーバーライド:
クラス AbstractMap<K,V> 内の isEmpty
戻り値:
マップがキーと値のマッピングを保持しない場合は true

get

public V get(Object key)
この識別情報ハッシュマップで指定されたキーにマップされている値を返します。マップがこのキーのマッピングを保持していない場合は null を返します。戻り値の null は、マップがキーのマッピングを保持していないことを示すとはかぎりません。つまり、マップが明示的にキーを null にマップすることもあります。containsKey メソッドを使うと、こうした 2 つの場合を見分けることができます。

定義:
インタフェース Map<K,V> 内の get
オーバーライド:
クラス AbstractMap<K,V> 内の get
パラメータ:
key - 関連付けられた値が返されるキー
戻り値:
マップが、指定されたキーにマッピングしている値。このキーに対するマッピングがマップにない場合は null
関連項目:
put(Object, Object)

containsKey

public boolean containsKey(Object key)
マップが指定されたキーのマッピングを保持する場合に true を返します。

定義:
インタフェース Map<K,V> 内の containsKey
オーバーライド:
クラス AbstractMap<K,V> 内の containsKey
パラメータ:
key - マップにあるかどうかが判定されるキー
戻り値:
マップが指定されたキーのマッピングを保持する場合は true

put

public V put(K key,
             V value)
指定された値と指定されたキーをこのマップに関連付けます。マップが以前にこのキーのマッピングを保持していた場合、古い値が置き換えられます。

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

putAll

public void putAll(Map<? extends K,? extends V> m)
指定されたマップからすべてのマッピングをマップにコピーします。これにより、マップが指定されたマップ内に現在あるキーのすべてに対して持っていたマッピングが置き換えられます。

定義:
インタフェース Map<K,V> 内の putAll
オーバーライド:
クラス AbstractMap<K,V> 内の putAll
パラメータ:
m - マップに格納されるマッピング
例外:
NullPointerException - 指定されたマップが null の場合

remove

public V remove(Object key)
キーに対するマッピングがあれば、そのキーをマップから削除します。

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

clear

public void clear()
すべてのマッピングをマップから削除します。

定義:
インタフェース Map<K,V> 内の clear
オーバーライド:
クラス AbstractMap<K,V> 内の clear

containsValue

public boolean containsValue(Object value)
マップが 1 つまたは複数のキーと指定された値をマッピングしている場合に true を返します。

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

clone

public Object clone()
HashMap のインスタンスのシャローコピーを返します。キーと値は、それ自体は複製されません。

オーバーライド:
クラス AbstractMap<K,V> 内の clone
戻り値:
このマップのシャローコピー
関連項目:
Cloneable

keySet

public Set<K> keySet()
マップに格納されているキーのセットビューを返します。セットはマップを基にするので、マップへの変更はセットで反映され、逆にセットへの変更はマップで反映されます。セットは、Iterator.removeSet.removeremoveAllretainAll、および clear の各オペレーションより、マップから対応するマッピングを削除する要素削除処理をサポートします。add オペレーションと addAll オペレーションは、セットではサポートされません。

定義:
インタフェース Map<K,V> 内の keySet
オーバーライド:
クラス AbstractMap<K,V> 内の keySet
戻り値:
マップに含まれているキーのセットビュー

values

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

定義:
インタフェース Map<K,V> 内の values
オーバーライド:
クラス AbstractMap<K,V> 内の values
戻り値:
マップ内に含まれている値のコレクションビュー

entrySet

public Set<Map.Entry<K,V>> entrySet()
マップに格納されているマッピングのコレクションビューを返します。返されたコレクションの各要素は Map.Entry です。コレクションはマップを基にしているので、マップへの変更はコレクションで反映され、逆にコレクションへの変更はマップで反映されます。コレクションは、Iterator.removeCollection.removeremoveAllretainAll、および clear の各オペレーションにより、マップから対応するマッピングを削除する要素削除処理をサポートします。add オペレーションと addAll オペレーションは、コレクションではサポートされません。

定義:
インタフェース Map<K,V> 内の entrySet
定義:
クラス AbstractMap<K,V> 内の entrySet
戻り値:
マップ内に保持されているマッピングのコレクションビュー
関連項目:
Map.Entry

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。