- 型パラメータ:
K
- このマップで保持されるキーの型V
- マップされる値の型
- すべての実装されたインタフェース:
Serializable
,Cloneable
,Map<K,
V>
Map
インタフェースを実装します。 つまり、IdentityHashMap
では、(k1==k2)
の場合のみ、2つのキーk1
およびk2
は等しいとみなされます。 (通常のMap
実装では、(HashMap
と同様) 2つのキーk1
およびk2
は、(k1==null ? k2==null : k1.equals(k2))
の場合にのみ等しいとみなされます。)
Thisクラスは、汎用のMap
実装ではありません。 このクラスはMap
インタフェースを実装しますが、意図的にMap's
一般契約に違反するため、オブジェクトの比較時にequals
メソッドの使用が義務付けられます。 このクラスは、参照の同一性のセマンティックスが要求された場合にのみ使用されるように設計されています。
このマップのビュー・コレクションには、その要素に対する参照等価性セマンティクスもあります。 詳細は、keySet
、values
およびentrySet
メソッドを参照してください。
このクラスの通常の使用では、直列化またはディープ・コピーなど、トポロジを保持するオブジェクト・グラフ変換を行います。 このような変換を実行するために、プログラムは、すでに処理されたすべてのオブジェクト参照を追跡する「ノード表」を保持する必要があります。 別個のオブジェクトが等しい場合でも、ノード表はそのオブジェクトを同等視してはいけません。 このクラスのもうひとつの使用法は、プロキシ・オブジェクトを維持することです。 たとえば、デバッグ機能は、デバッグされたプログラムで各オブジェクトのプロキシ・オブジェクトを維持できます。
このクラスは、オプションのマップ操作をすべて提供し、null
値およびnull
キーを許可します。 このクラスはマップの順序を保証しません。特に、その順序を常に一定に保つことを保証しません。
このクラスは、システム・アイデンティティ・ハッシュ関数(System.identityHashCode(Object)
)がバケット間で要素を適切に分散していることを前提として、基本操作(get
およびput
)の定時パフォーマンスを提供します。
このクラスにはチューニング・パラメータがひとつあります。チューニング・パラメータはセマンティックスではなく、パフォーマンスに影響を与えます。すなわち、予想最大サイズです。 このパラメータは、マップが保持されると予想されるキー値マッピングの最大数です。 このパラメータを使用して、ハッシュ表を初期構成するバケットの数を算出します。 予想された最大サイズとバケット数との正確な関係は指定されていません。
マップのサイズ(キーと値のマッピング数)が期待される最大サイズをかなりの大きさで超過する場合、バケットの数は増加します。 バケットの数の増加(ハッシュのやり直し)は非常に費用がかかるため、大きさが十分な期待される最大サイズでアイデンティティ・ハッシュを作成すると費用を抑えられます。 一方、コレクション・ビューの繰返しは、ハッシュ表のバケット数に比例した時間を要求します。そのため繰返しのパフォーマンスまたはメモリー使用に特に懸念がある場合は、予想最大サイズをあまり大きくしないようにします。
この実装はsynchronizedされません。 複数のスレッドが並行してアイデンティティ・ハッシュ・マップにアクセスし、それらのスレッドの少なくとも1つが構造的にマップを変更する場合は、外部でその同期をとる必要があります。 構造的な変更とは、1つ以上のマッピングを追加または削除するオペレーションのことです。すでにインスタンスに格納されているキーに関連付けられた値を変更することは構造的な変更ではありません。 これは通常、マップを自然にカプセル化する一部のオブジェクトでsynchronizedすることによって達成されます。 そのようなオブジェクトが存在しない場合は、Collections.synchronizedMap
メソッドを使用してマップを「ラップ」することをお薦めします。 マップが誤ってsynchronizedなしでアクセスされるのを防ぐために、作成時に行うことをお薦めします。
Map m = Collections.synchronizedMap(new IdentityHashMap(...));
このクラスのすべてのコレクション・ビュー・メソッドによって返されるコレクションのiterator
メソッドによって返されるイテレータは、フェイルファストです。 イテレータの作成後に、イテレータ自体のremove
メソッド以外の方法でマップが構造的に変更されると、イテレータはConcurrentModificationException
をスローします。 このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。
通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、イテレータのフェイルファストの動作を保証することはできません。 フェイルファスト・イテレータは、ベスト・エフォート・ベースでConcurrentModificationException
をスローします。 したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。フェイルファストのイテレータはバグを検出するためにのみ使用すべきです。
このクラスは、Java Collections Frameworkのメンバーです。
- 実装上のノート:
これは、SedgewickおよびKnuthによるテキストなどで説明されている単純なlinear-probeハッシュ表です。 配列には代替のキーと値が含まれ、偶数索引にはキー、奇数索引には値が含まれます。 (この配置は、別々の配列を使用するよりも大きな表の局所性が高くなります。) 多くのJava実装および操作が混在している場合、このクラスは、ライナー・プロファイリングではなく「連鎖」を使用する
HashMap
よりもパフォーマンスが向上します。- 導入されたバージョン:
- 1.4
- 関連項目:
-
ネストされたクラスのサマリー
クラスjava.util.AbstractMapで宣言されたネストされたクラス/インタフェース
AbstractMap.SimpleEntry<K,
V>, AbstractMap.SimpleImmutableEntry<K, V> -
コンストラクタのサマリー
コンストラクタ説明デフォルトの予想最大サイズ(21)で、新しい空のアイデンティティ・ハッシュ・マップを構築します。IdentityHashMap
(int expectedMaxSize) 指定した予想最大サイズで、新しい空のマップを構築します。IdentityHashMap
(Map<? extends K, ? extends V> m) 指定されたマップのキーと値のマッピングを含む新しいアイデンティティ・ハッシュ・マップを構築します。 -
メソッドのサマリー
修飾子と型メソッド説明void
clear()
すべてのマッピングをマップから削除します。clone()
アイデンティティ・ハッシュ・マップのシャロー・コピーを返します。キーと値は、それ自体は複製されません。boolean
containsKey
(Object key) 指定されたオブジェクト参照が、このアイデンティティ・ハッシュ・マップのキーかどうかを判定します。boolean
containsValue
(Object value) 指定されたオブジェクト参照が、このアイデンティティ・ハッシュ・マップの値かどうかを判定します。entrySet()
このマップに含まれるマッピングのSet
ビューを返します。boolean
指定されたオブジェクトがこのマップと等しいかどうかを比較します。指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnull
を返します。int
hashCode()
マップのハッシュ・コード値を返します。boolean
isEmpty()
このアイデンティティ・ハッシュ・マップにキーと値のマッピングが含まれていない場合は、true
を返します。keySet()
マップに格納されているキーのアイデンティティ・ベースのセット・ビューを返します。指定された値と指定されたキーをこのアイデンティティ・ハッシュ・マップに関連付けます。void
指定されたマップからすべてのマッピングをマップにコピーします。キーに対するマッピングがあれば、そのキーをマップから削除します。boolean
指定されたキーが現在、指定された値(オプションの操作)にマップされている場合にのみ、そのキーのエントリを削除します。boolean
指定された値(オプションの操作)に現在マップされている場合にのみ、指定されたキーのエントリを置換します。int
size()
このアイデンティティ・ハッシュ・マップ内のキーと値のマッピングの数を返します。values()
このマップに含まれる値のCollection
ビューを返します。クラスjava.util.AbstractMapで宣言されたメソッド
toString
インタフェースjava.util.Mapで宣言されたメソッド
compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, replace, replaceAll
-
コンストラクタの詳細
-
IdentityHashMap
public IdentityHashMap()デフォルトの予想最大サイズ(21)で、新しい空のアイデンティティ・ハッシュ・マップを構築します。 -
IdentityHashMap
public IdentityHashMap(int expectedMaxSize) 指定した予想最大サイズで、新しい空のマップを構築します。 キーと値のマッピングの予想以上の数をマップに入れると、内部データ構造が大きくなる場合があります。これには時間が多少かかる場合があります。- パラメータ:
expectedMaxSize
- マップの予想最大サイズ- 例外:
IllegalArgumentException
-expectedMaxSize
が負の場合
-
IdentityHashMap
指定されたマップのキーと値のマッピングを含む新しいアイデンティティ・ハッシュ・マップを構築します。- パラメータ:
m
- マッピングがこのマップに配置されるマップ- 例外:
NullPointerException
- 指定されたマップがnullの場合
-
-
メソッドの詳細
-
size
-
isEmpty
-
get
指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnull
を返します。つまり、このメソッドは、
(key == k)
となるキーk
から値v
へのマッピングがこのマップに含まれている場合はv
を返し、それ以外の場合はnull
を返します。 (このようなマッピングは1つのみ存在できます。)戻り値
null
は、マップがキーのマッピングを保持していないことを示すとはかぎりません。つまり、マップが明示的にキーをnull
にマップすることもあります。containsKey
操作を使うと、これら2つのケースを見分けることができます。 -
containsKey
public boolean containsKey(Object key) 指定されたオブジェクト参照が、このアイデンティティ・ハッシュ・マップのキーかどうかを判定します。 このマップに(key == k)
のようなキーk
とのマッピングが含まれている場合にのみ、true
を返します。- 定義:
- インタフェース
Map<K,
内のV> containsKey
- オーバーライド:
- クラス
AbstractMap<K,
のV> containsKey
- パラメータ:
key
- 使用可能なキー- 戻り値:
- 指定されたオブジェクト参照がマップのキーである場合は、
true
- 関連項目:
-
containsValue
public boolean containsValue(Object value) 指定されたオブジェクト参照が、このアイデンティティ・ハッシュ・マップの値かどうかを判定します。 このマップに(value == v)
のような値v
のマッピングが含まれている場合にのみ、true
を返します。- 定義:
- インタフェース
Map<K,
内のV> containsValue
- オーバーライド:
- クラス
AbstractMap<K,
のV> containsValue
- パラメータ:
value
- このマップにあるかどうかが判定される値- 戻り値:
- このマップが1つ以上のキーを指定されたオブジェクト参照にマップする場合、
true
- 関連項目:
-
put
指定された値と指定されたキーをこのアイデンティティ・ハッシュ・マップに関連付けます。 このマップがキーのマッピングをすでにcontains
している場合は、古い値が置き換えられます。そうでない場合は、新しいマッピングがこのマップに挿入されます。 -
putAll
指定されたマップからすべてのマッピングをマップにコピーします。 指定したマップの各マッピングについて、このマップがキーのマッピングをすでにcontains
している場合、その値は指定されたマップの値に置き換えられます。それ以外の場合は、新しいマッピングがこのマップに挿入されます。- 定義:
- インタフェース
Map<K,
内のV> putAll
- オーバーライド:
- クラス
AbstractMap<K,
のV> putAll
- パラメータ:
m
- このマップに格納されるマッピング- 例外:
NullPointerException
- 指定されたマップがnullの場合
-
remove
-
clear
-
equals
public boolean equals(Object o) 指定されたオブジェクトがこのマップと等しいかどうかを比較します。 指定されたオブジェクトもマップであり、2つのマップが同じオブジェクト参照マッピングを表す場合は、true
を返します。 より正式には、このマップは、this.entrySet().equals(m.entrySet())
の場合にのみ、別のマップm
と等しくなります。 このマップのエントリの等価性については、entrySet
メソッドを参照してください。このマップの参照等価性ベースのセマンティクスにOwingを指定すると、このマップを通常のマップと比較すると、
Object.equals
契約の対称性および推移性の要件に違反する可能性があります。 ただし、Object.equals
契約は、IdentityHashMap
instances.間で保持されることが保証されています -
hashCode
public int hashCode()マップのハッシュ・コード値を返します。 マップのハッシュ・コードは、このマップの各エントリのハッシュ・コードの合計として定義されます。 このマップのエントリのハッシュ・コードの指定については、entrySet
メソッドを参照してください。この指定により、
Object.hashCode()
の一般的な契約で必要となる2つのIdentityHashMap
インスタンスm1
およびm2
に対するm1.equals(m2)
が暗黙的に指定されます。このマップの
entrySet
メソッドによって返されるセット内のMap.Entry
インスタンスの参照等価性ベースのセマンティクスにより、比較される2つのオブジェクトのいずれかがIdentityHashMap
インスタンスで、もう一方が通常のマップの場合、前の段落で説明したObject.hashCode
の契約上の要件に違反する可能性があります。 -
clone
public Object clone()アイデンティティ・ハッシュ・マップのシャロー・コピーを返します。キーと値は、それ自体は複製されません。- オーバーライド:
- クラス
AbstractMap<K,
のV> clone
- 戻り値:
- このマップのシャロー・コピー
- 関連項目:
-
keySet
マップに格納されているキーのアイデンティティ・ベースのセット・ビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合は、反復処理の結果は定義されません。 このセットでは、Iterator.remove
,Set.remove
,removeAll
,retainAll
およびclear
メソッドを介してマップから対応するマッピングを削除する要素の削除がサポートされています。add
またはaddAll
メソッドはサポートされません。このメソッドによって返されるWhileは、
Set
インタフェースを実装し、Set's
一般契約に従いません。 オブジェクトの元になるマップのように、このメソッドが返したセットは、オブジェクトの同一性でなく、参照の同一性として、要素の同一性を定義します。 これは、そのcontains
,remove
,containsAll
,equals
およびhashCode
methods.の動作に影響返されたセットのThe
equals
メソッドは、指定されたオブジェクトが、返されたセットとまったく同じオブジェクト参照を含むセットである場合にのみ、true
を返します。 このメソッドから返されるセットを通常のセットと比較すると、Object.equals
契約の対称および過渡性要件に違反する可能性があります。 ただし、Object.equals
契約は、このmethod.によって返されるセット間で保持されることが保証されています返されたセットの
hashCode
メソッドは、ハッシュ・コードの合計ではなく、セット内の要素の「アイデンティティ・ハッシュ・コード」の合計を返します。 これは、このメソッドによって返されるセット間でObject.hashCode
メソッドの一般的な契約を強制するために、equals
メソッドのセマンティクスの変更によって義務付けられます。 -
values
public Collection<V> values()このマップに含まれる値のCollection
ビューを返します。 コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。 コレクションの反復処理中にマップが変更された場合は、反復処理の結果は定義されません。 コレクションは、Iterator.remove
,Collection.remove
,removeAll
,retainAll
およびclear
メソッドを介してマップから対応するマッピングを削除する要素の削除をサポートしています。add
またはaddAll
メソッドはサポートされません。このメソッドによって返されるWhileは、
Collection
インタフェースを実装し、Collection's
一般契約に従いません。 オブジェクトの元になるマップのように、このメソッドが返すコレクションは、オブジェクトの同一性でなく、参照の同一性として、要素の同一性を定義します。 これは、contains
、remove
およびcontainsAll
methods.の動作に影響 -
entrySet
このマップに含まれるマッピングのSet
ビューを返します。 返されるセット内の各要素は、参照等価性ベースのMap.Entry
です。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合は、反復処理の結果は定義されません。 このセットでは、Iterator.remove
,Set.remove
,removeAll
,retainAll
およびclear
メソッドを介してマップから対応するマッピングを削除する要素の削除がサポートされています。add
またはaddAll
メソッドはサポートされません。バッキング・マップと同様に、このメソッドから返されるセット内の
Map.Entry
オブジェクトは、キーと値の等価を、オブジェクト等価ではなく参照等価として定義します。 これは、これらのMap.Entry
オブジェクトのequals
およびhashCode
メソッドの動作に影響します。 参照等価性に基づくMap.Entry e
は、o
がMap.Entry
およびe.getKey()==o.getKey() && e.getValue()==o.getValue()
の場合にのみ、オブジェクトo
と等しくなります。 これらの等価セマンティクスに対応するために、hashCode
メソッドはSystem.identityHashCode(e.getKey()) ^ System.identityHashCode(e.getValue())
を返します。 (キーと値は参照等価を使用して比較されますが、Map.Entry
オブジェクト自体は比較されません。)このメソッドによって返されるセット内の
Map.Entry
インスタンスの参照等価性ベースのセマンティクスにOwingを指定すると、Object.equals(Object)
契約の対称性および推移性要件が考えられますセット内のいずれかのエントリを通常のマップ・エントリと比較した場合、またはこのメソッドから返されるセットが通常のマップ・エントリのセット(通常のマップでこのメソッドへのコールによって返されるなど)と比較した場合、違反します。 ただし、Object.equals
契約は、アイデンティティ・ベースのマップ・エントリ間およびこのようなエントリのセット間で保持されることが保証されています。 -
remove
指定されたキーが現在、指定された値(オプションの操作)にマップされている場合にのみ、そのキーのエントリを削除します。より正式には、このマップにキー
k
から値v
へのマッピング((key == k)
および(value == v)
など)が含まれている場合、このメソッドはこのキーのマッピングを削除し、true
を返します。それ以外の場合は、false
を返します。 -
replace
指定された値(オプションの操作)に現在マップされている場合にのみ、指定されたキーのエントリを置換します。より正式には、このマップにキー
k
から値v
へのマッピング((key == k)
および(oldValue == v)
など)が含まれている場合、このメソッドはk
をnewValue
に関連付け、true
を返します。それ以外の場合は、false
を返します。
-