- 型パラメータ:
K
- このマップで保持されるキーの型V
- マップされる値の型
- すべての実装されたインタフェース:
Serializable
,Cloneable
,Map<K,
V>
Map
インタフェースのハッシュ表およびリンク・リスト実装(予測可能な反復順序)。 この実装は、HashMap
とは異なります。これは、すべてのエントリを経由して実行される二重リンク・リストを保持する点です。 このリンク・リストは、反復順序を定義します。この順序は通常、キーがマップに挿入された順序です(挿入順)。 キーがマップに再挿入されても、挿入順は影響を受けません。 (キーk
は、m.containsKey(k)
が呼出しの直前にtrue
を返すときにm.put(k, v)
が呼び出されると、マップm
に再挿入されます。)
この実装では、HashMap
およびHashtable
で提供される未指定(無秩序)の順序がクライアントで起きることはありません(TreeMap
のように負荷が増えることもありません)。 この実装を使用することで、元のマップの実装にかかわらず、元のマップと同じ順序のコピーを作成できます。
void foo(Map<String, Integer> m) {
Map<String, Integer> copy = new LinkedHashMap<>(m);
...
}
この技術は、モジュールが入力としてマップを取り、それをコピーし、順序がコピーの順序で決まる結果を返す場合に、特に役立ちます。 クライアントは一般的に、渡された順序で返されることを想定します。
特別なconstructor
が、リンク・ハッシュ・マップを作成するために提供されています (反復の順序は、そのエントリがアクセスされた順序、つまり、もっとも過去にアクセスされたものから、もっとも新しくアクセスされたものへ(アクセス順))。 この種のマップは、LRUキャッシュを構築するのに最適です。 put
、putIfAbsent
、get
、getOrDefault
、compute
、computeIfAbsent
、computeIfPresent
またはmerge
メソッドを呼び出すことは、対応するエントリにアクセスすることになります(呼出し完了後にそれが存在することを前提とする)。 replace
メソッドは、値が置換されている場合にはエントリにアクセスするだけになります。 putAll
メソッドは、指定されたマップのエントリ・セット・イテレータによってキー値マッピングが提供される順序で、指定されたマップ内の各マッピングへの1回のアクセスを生成します。 他のメソッドはエントリ・アクセスを生成しません。 特に、コレクション・ビューに対する操作はバッキング・マップの反復順序に影響しません。
マップに新しいマッピングが追加されると、自動的に古いマッピングを削除するポリシーを適用するために、removeEldestEntry(Map.Entry)
メソッドがオーバーライドされる場合があります。
このクラスは、オプションのMap
操作をすべて提供し、null要素を許可します。 HashMap
と同様、ハッシュ関数がバケット間で要素を適切に分散すると、基本操作(add
、contains
およびremove
)に対して一定時間のパフォーマンスが提供されます。 リンク・リストを維持する追加コストが1つあるため、パフォーマンスはHashMap
のパフォーマンスのわずかに下回る可能性があります: LinkedHashMap
のコレクション・ビューに対する反復には、その容量に関係なく、マップのsizeに比例した時間が必要です。 HashMap
に対する反復は、その「容量」に比例した時間を必要とする、より高コストになる可能性があります。
リンク・ハッシュ・マップには、パフォーマンスに影響を及ぼすパラメータが2つあります。初期容量と負荷係数です。 これらは、HashMap
の場合と同様に正確に定義されます。 ただし、このクラスの反復時間は容量の影響を受けないため、初期容量に対して過度に高い値を選択するペナルティは、HashMap
よりも厳しいです。
この実装はsynchronizedされません。 複数のスレッドが並行してリンク・ハッシュ・マップにアクセスし、それらのスレッドの少なくとも1つが構造的にマップを変更する場合には、外部でsynchronizedする必要があります。 これは通常、マップを自然にカプセル化する一部のオブジェクトでsynchronizedすることによって達成されます。 そのようなオブジェクトが存在しない場合は、Collections.synchronizedMap
メソッドを使用してマップを「ラップ」することをお薦めします。 マップが誤ってsynchronizedなしでアクセスされるのを防ぐために、作成時に行うことをお薦めします。
Map m = Collections.synchronizedMap(new LinkedHashMap(...));構造的な変更は、1つまたは複数のマッピングを追加または削除するオペレーションです。アクセス順のリンク・ハッシュ・マップの場合は、反復順序に影響します。 挿入順のリンク・ハッシュ・マップでは、すでにマップに含まれているキーに関連付けられた値を変更するだけの場合は、構造的な変更ではありません。 アクセス順序のリンクされたハッシュ・マップでは、
get
を使用してマップを問い合せるのみで構造的な変更になります。 )
このクラスのすべてのコレクション・ビュー・メソッドによって返されるコレクションのiterator
メソッドによって返されるイテレータは、fail-fastです: イテレータの作成後にマップが構造的に変更された場合、イテレータ独自のremove
メソッド以外のすべての方法で、イテレータはConcurrentModificationException
をスローします。 このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。
通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、イテレータのフェイルファストの動作を保証することはできません。 フェイルファスト・イテレータは、ベスト・エフォート・ベースでConcurrentModificationException
をスローします。 したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。イテレータのフェイルファストの動作はバグを検出するためにのみ使用すべきです。
このクラスのすべてのコレクション・ビュー・メソッドによって返されるコレクションのスプリッテレータ・メソッドによって返されるスプリッテレータは、遅延バインディングおよびフェイルファストで、さらにSpliterator.ORDERED
を報告します。
このクラスは、Java Collections Frameworkのメンバーです。
- 実装上のノート:
- このクラスのすべてのコレクション・ビュー・メソッドによって返されるコレクションのスプリッテレータ・メソッドによって返されるスプリッテレータは、対応するコレクションのイテレータから作成されます。
- 導入されたバージョン:
- 1.4
- 関連項目:
-
ネストされたクラスのサマリー
クラス java.util.AbstractMapで宣言されたネストされたクラス/インタフェース
AbstractMap.SimpleEntry<K,
V>, AbstractMap.SimpleImmutableEntry<K, V> -
コンストラクタのサマリー
コンストラクタコンストラクタ説明デフォルトの初期容量(16)および負荷係数(0.75)を使用して、空の挿入順序のLinkedHashMap
インスタンスを作成します。LinkedHashMap
(int initialCapacity) 指定された初期容量およびデフォルトのロード・ファクタ(0.75)を使用して、挿入順序の空のLinkedHashMap
インスタンスを作成します。LinkedHashMap
(int initialCapacity, float loadFactor) 指定された初期容量と負荷係数を持つ空の挿入順序のLinkedHashMap
インスタンスを構築します。LinkedHashMap
(int initialCapacity, float loadFactor, boolean accessOrder) 指定された初期容量、負荷係数および順序付けモードで空のLinkedHashMap
インスタンスを構築します。LinkedHashMap
(Map<? extends K, ? extends V> m) 指定したマップと同じマッピングを使用して、挿入順序のLinkedHashMap
インスタンスを構築します。 -
メソッドのサマリー
修飾子と型メソッド説明void
clear()
すべてのマッピングをマップから削除します。boolean
containsValue
(Object value) このマップが1つまたは複数のキーと指定された値をマッピングしている場合にtrue
を返します。entrySet()
このマップに含まれるマッピングのSet
ビューを返します。指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnull
を返します。keySet()
このマップに含まれるキーのSet
ビューを返します。static <K,
V> LinkedHashMap<K, V> newLinkedHashMap
(int numMappings) 予想されるマッピング数に適した、新しい空の挿入順序のLinkedHashMapを作成します。protected boolean
removeEldestEntry
(Map.Entry<K, V> eldest) このマップが最長のエントリを削除する必要がある場合、true
を返します。values()
このマップに含まれる値のCollection
ビューを返します。クラス java.util.HashMapで宣言されたメソッド
clear, clone, compute, computeIfAbsent, computeIfPresent, containsKey, isEmpty, merge, newHashMap, put, putAll, remove, size
クラス java.util.AbstractMapで宣言されたメソッド
equals, hashCode, toString
インタフェース java.util.Mapで宣言されたメソッド
compute, computeIfAbsent, computeIfPresent, containsKey, equals, forEach, getOrDefault, hashCode, isEmpty, merge, put, putAll, putIfAbsent, remove, remove, replace, replace, replaceAll, size
-
コンストラクタの詳細
-
LinkedHashMap
public LinkedHashMap(int initialCapacity, float loadFactor) 指定された初期容量と負荷係数を持つ空の挿入順序のLinkedHashMap
インスタンスを構築します。- APIのノート:
- 予想される数のマッピングに対応する初期容量を持つ
LinkedHashMap
を作成するには、newLinkedHashMap
を使用します。 - パラメータ:
initialCapacity
- 初期容量loadFactor
- 負荷係数- 例外:
IllegalArgumentException
- 初期容量が負であるか、負荷係数が正でない場合
-
LinkedHashMap
public LinkedHashMap(int initialCapacity) 指定された初期容量およびデフォルトのロード・ファクタ(0.75)を使用して、挿入順序の空のLinkedHashMap
インスタンスを作成します。- APIのノート:
- 予想される数のマッピングに対応する初期容量を持つ
LinkedHashMap
を作成するには、newLinkedHashMap
を使用します。 - パラメータ:
initialCapacity
- 初期容量- 例外:
IllegalArgumentException
- 初期容量が負の場合
-
LinkedHashMap
public LinkedHashMap()デフォルトの初期容量(16)および負荷係数(0.75)を使用して、空の挿入順序のLinkedHashMap
インスタンスを作成します。 -
LinkedHashMap
指定したマップと同じマッピングを使用して、挿入順序のLinkedHashMap
インスタンスを構築します。LinkedHashMap
インスタンスは、デフォルトのロード・ファクタ(0.75)と、指定したマップにマッピングを保持するのに十分な初期容量で作成されます。- パラメータ:
m
- マッピングがこのマップに配置されるマップ- 例外:
NullPointerException
- 指定されたマップがnullの場合
-
LinkedHashMap
public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) 指定された初期容量、負荷係数および順序付けモードで空のLinkedHashMap
インスタンスを構築します。- パラメータ:
initialCapacity
- 初期容量loadFactor
- 負荷係数accessOrder
- 順序付けモード -true
(アクセス順序)、false
(挿入順序)- 例外:
IllegalArgumentException
- 初期容量が負であるか、負荷係数が正でない場合
-
-
メソッドの詳細
-
containsValue
public boolean containsValue(Object value) このマップが1つまたは複数のキーと指定された値をマッピングしている場合にtrue
を返します。- 定義:
- インタフェース
Map<K,
内のV> containsValue
- オーバーライド:
- クラス
HashMap<K,
のV> containsValue
- パラメータ:
value
- このマップにあるかどうかが判定される値- 戻り値:
- このマップが1つまたは複数のキーを指定された値にマッピングしている場合は
true
-
get
指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnull
を返します。つまり、このメソッドは、
(key==null ? k==null : key.equals(k))
となるキーk
から値v
へのマッピングがこのマップに含まれている場合はv
を返し、それ以外の場合はnull
を返します。 (このようなマッピングは1つのみ存在できます。)戻り値
null
は、マップがキーのマッピングを保持していないことを示すとはかぎりません。つまり、マップが明示的にキーをnull
にマップすることもあります。containsKey
操作を使うと、これら2つのケースを見分けることができます。 -
clear
public void clear()すべてのマッピングをマップから削除します。 この呼出しが戻ると、マップは空になります。 -
removeEldestEntry
このマップが最長のエントリを削除する必要がある場合、true
を返します。 このメソッドは、マップに新しいエントリを挿入した後、put
およびputAll
によって呼び出されます。 新しいエントリが追加されるたびに、このメソッドは一番古いエントリを削除する機会を実装側に提供します。 これは、マップがキャッシュを表す場合に有効です。古いエントリを削除することで、マップはメモリー消費を低減できます。サンプル使用: このオーバーライドにより、マップはエントリを最大100個まで増加し、新しいエントリが追加されるたびに一番古いエントリを削除できます(エントリ数は常に100個で維持されます)。
private static final int MAX_ENTRIES = 100; protected boolean removeEldestEntry(Map.Entry eldest) { return size() > MAX_ENTRIES; }
このメソッドは通常、マップを変更しません。代わりに、戻り値で指示されたとおりにマップが自身を変更することを許可します。 このメソッドでマップを直接変更することは許可されていますが、変更する場合は、
false
(マップがこれ以上の変更を試行しないことを示す)を返す必要があります。 このメソッド内からマップを変更した後でtrue
を返す効果は不明です。この実装では、単に
false
(このマップが通常のマップのように動作するようにします - eldest要素は削除されません)を返します。- パラメータ:
eldest
- もっとも以前にマップに挿入されたエントリ。これがアクセス順マップの場合は、もっとも以前にアクセスされたエントリ。 これは削除されるエントリで、このメソッドはtrue
を返します。put
またはputAll
呼出しの前にマップが空で、この呼出しが発生した場合、これは挿入されたエントリになります。つまり、マップに1つのエントリが含まれている場合、最も古いエントリも最新になります。- 戻り値:
- 最も古いエントリをマップから削除する場合は
true
、保持する場合はfalse
。
-
keySet
このマップに含まれるキーのSet
ビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合、反復処理の結果は定義されていません(イテレータ自身のremove
オペレーションを除く)。 セットは要素の削除をサポートします。Iterator.remove
、Set.remove
、removeAll
、retainAll
、およびclear
オペレーションで対応するマッピングをマップから削除します。add
またはaddAll
操作はサポートされていません。 そのSpliterator
は通常、HashMap
より高速な順次パフォーマンスを提供しますが、並列パフォーマンスは大幅に低下します。 -
values
public Collection<V> values()このマップに含まれる値のCollection
ビューを返します。 コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。 コレクションの反復処理中にマップが変更された場合、反復処理の結果は定義されません(イテレータ自身のremove
オペレーションを除く)。 コレクションは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove
、Collection.remove
、removeAll
、retainAll
、およびclear
オペレーションを通して行います。add
またはaddAll
操作はサポートされていません。 そのSpliterator
は通常、HashMap
より高速な順次パフォーマンスを提供しますが、並列パフォーマンスは大幅に低下します。 -
entrySet
このマップに含まれるマッピングのSet
ビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合、反復処理の結果は定義されません(イテレータ自身のremove
オペレーション、またはイテレータにより返されるマップ・エントリに対するsetValue
オペレーションを除く)。 セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove
、Set.remove
、removeAll
、retainAll
、およびclear
オペレーションを通して行います。add
またはaddAll
操作はサポートされていません。 そのSpliterator
は通常、HashMap
より高速な順次パフォーマンスを提供しますが、並列パフォーマンスは大幅に低下します。 -
newLinkedHashMap
public static <K,V> LinkedHashMap<K,V> newLinkedHashMap(int numMappings) 予想されるマッピング数に適した、新しい空の挿入順序のLinkedHashMapを作成します。 返されるマップではデフォルトのロード係数0.75が使用され、初期容量は通常十分に大きいため、マップのサイズを変更せずに必要な数のマッピングを追加できます。- 型パラメータ:
K
- 新しいマップによって保持されるキーのタイプV
- マップされる値の型- パラメータ:
numMappings
- マッピングの予想数- 戻り値:
- 新しく作成されたマップ
- 例外:
IllegalArgumentException
- numMappingsが負の場合- 導入されたバージョン:
- 19
-