模块  java.base
软件包  java.util

Class HashMap<K,​V>

  • 参数类型
    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、同期されておらず、null値を許可する点を除きます。)このクラスはマップの順序を保証しません; 特に、順序が時間の経過とともに変わらないことは保証されません。

    この実装は基本操作(getとput)は、ハッシュ関数が要素をバケット間で正しく分散することを前提として、一定時間の性能を提供します。 コレクションビューの反復には、...とHashMapインスタンスの「容量」(バケット数)にそのサイズ(キーと値のマッピング数)を加えたものに比例する時間。 因此,如果迭代性能很重要,则不要将初始容量设置得太高(或负载因子太低)非常重要。

    HashMapのインスタンスには、そのパフォーマンスに影響をとえる2つのパラメータがあります:初始容量と负载因子 。 容量これはハッシュテーブル内のバケット数であり、初期容量はハッシュテーブル作成時の容量にすぎません。 加载因子自動的に容量を増やす前にハッシュテーブルが許容できる充填度の尺度です。 ハッシュテーブルのエントリ数が、負荷係数と現在の容量の積を超えると、ハッシュテーブルは重新ハッシュ(すなわち、内部データ構造の再構築)を行い、ハッシュテーブルのバケット数を約2倍にします。

    一般規則として、デフォルトの負荷係数(.75)は時間と空間のコストの間で良好な折衷を提供します。 高い値は空間オーバーヘッドを減らしますが、検索コストを増加させます(反映されるHashMapクラスのほとんどの操作では、...を含むgetとput )。 初期容量を設定するときは、マップ内の予想エントリ数とその負荷係数を考慮して、再ハッシュ操作の数を最小限に抑える必要があります。 如果初始容量大于最大条目数除以加载因子,则不会发生重新加载操作。

    複数のマッピングを...に格納する場合はHashMapインスタンスでは、十分に大きな容量を使用してマップを作成すると、必要に応じて自動的に再ハッシュを実行してテーブルを拡張するのではなく、マップをより効率のに保存できます。 请注意,使用具有相同hashCode()多くのキーは、あらゆるハッシュテーブルのパフォーマンスを低下させる確実な方法です 影響を改善するために、キーがComparable时、このようなクラスは、キー間の比較順序を使用して同順位を解消するのに役立ちます。

    この実装は同期されないことに注意してください。 複数のスレッドがハッシュマップに同時にアクセスし、少なくとも1つのスレッドがマップを構造のに変更する場合、必须外部で同期します。 (構造変更とは、1つ以上のマッピングを追加または削除する任意の操作です。インスタンスがすでに含むキーに関連付けられた値を変更するだけでは、構造変更ではありません。)これは通常、マップを自然にカプセル化する何らかのオブジェクトに同期することで行われます。 。 そのようなオブジェクトが存在しない場合は、使用する必要がありますCollections.synchronizedMap方法“包装”地图。 これは、誤ってマップに同期されずにアクセスすることを防ぐために、作成時に行うのが最善です:

      Map m = Collections.synchronizedMap(new HashMap(...)); 

    このクラスの「コレクションビューメソッド」が返すイテレータはすべて、フェイルファストの:イテレータの作成後にマップが構造のに変更された場合、イテレータ自身のremove方法之外,迭代器将抛出ConcurrentModificationException 。 したがって、並行変更の場合、イテレータは将来の不確定な時点で任意の非決定のな動作のリスクを冒すのではなく、迅速かつクリーンに失敗します。

    イテレータのフェイルファスト動作は保証されないことに注意してください。一般のに、同期されていない並行変更が存在する場合、厳格な保証をすることは不可能です。 フェイルファストイテレータはベストエフォート方式でスローされます。ConcurrentModificationException 。 したがって、この例外に依存してその正しさを保証するプログラムを作成することは誤りです:イテレータのフェイルファスト動作は、エラーを検出するためだけに使用すべきです。

    このクラスはJava Collections Frameworkのメンバー。

    以下のバージョンから:
    1.2
    另请参见:
    Object.hashCode() , Collection , Map , TreeMap , Hashtable , Serialized Form
    • コンストラクタの概要

      构造方法  
      构造器 描述
      HashMap()
      デフォルトの初期容量(16)とデフォルトの負荷係数(0.75)を使用して空のマップを構築します。HashMap 。
      HashMap​(int initialCapacity)
      指定された初期容量とデフォルトの負荷係数(0.75)を使用して、空の...を構築します。HashMap 。
      HashMap​(int initialCapacity, float loadFactor)
      指定された初期容量と負荷係数を使用して空のものを構築しますHashMap 。
      HashMap​(Map<? extends K,​? extends V> m)
      新しい...を構築するHashMap、そのマッピングは指定されたMap相同。
    • メソッドの概要

      所有方法  インスタンスメソッド 具体的な方法 
      変数と型 方法 描述
      void clear()
      このマップからすべてのマッピングを削除します。
      Object clone()
      返回此 HashMapインスタンスのシャローコピー:キーと値自体はクローンされません。
      V compute​(K key, BiFunction<? super K,​? super V,​? extends V> remappingFunction)
      指定されたキーとその現在のマッピング値のマッピングを計算しようとします(現在のマッピングがない場合は、null )。
      V computeIfAbsent​(K key, Function<? super K,​? extends V> mappingFunction)
      指定されたキーがまだ値に関連付けられていない場合(またはマッピングされている場合null)の場合は、指定されたマッピング関数を使用してその値を計算し、このマップに入力しようとします。ただし、null 。
      V computeIfPresent​(K key, BiFunction<? super K,​? super V,​? extends V> remappingFunction)
      指定されたキーの値が存在し、nullでない場合、そのキーと現在のマッピング値を使用して新しいマッピングの計算を試みます。
      boolean containsKey​(Object key)
      このマップが指定されたキーのマッピングを含む場合、戻りますtrue 。
      boolean containsValue​(Object value)
      如果此映射将一个或多个键映射到指定值,则返回 true 。
      Set<Map.Entry<K,​V>> entrySet()
      このマップに含まれるマッピングのSet视图。
      V get​(Object key)
      指定されたキーがマップされる値を返します。このマップにそのキーのマッピングが含まれていない場合は、null 。
      boolean isEmpty()
      如果此映射不包含键 - 值映射,则返回 true 。
      Set<K> keySet()
      このマップに含まれるキーを返しますSet视图。
      V merge​(K key, V value, BiFunction<? super V,​? super V,​? extends V> remappingFunction)
      指定されたキーがまだ値に関連付けられていないか、null に関連付けられている場合、指定された非 null 値に関連付けます。
      V put​(K key, V value)
      指定された値を、このマップ内の指定されたキーに関連付けます。
      void putAll​(Map<? extends K,​? extends V> m)
      指定されたマップ内のすべてのマッピングをこのマップにコピーします。
      V remove​(Object key)
      このマップから、指定されたキーのマッピング(存在する場合)を削除します。
      int size()
      このマップ内のキーと値のマッピングの数を返します。
      Collection<V> values()
      このマップに含まれる値を返しますCollection视图。
    • コンストラクタの詳細

      • 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)
        新しい...を構築するHashMap、そのマッピングは指定されたMap相同。 HashMap作成時には、デフォルトの負荷係数(0.75)と、指定されたものを保持するのに十分なMapマップの初期容量。
        参数
        m - mこのマップに配置されたマッピング
        异常
        NullPointerException- 指定されたマップがnullの場合
    • メソッドの詳細

      • size

        public int size()
        このマップ内のキーと値のマッピングの数を返します。
        Specified by:
        sizeインターフェースでMap<K,​V>
        重写:
        size类 AbstractMap<K,​V>
        结果
        このマップにおけるキーと値のマッピングの数
      • isEmpty

        public boolean isEmpty()
        如果此映射不包含键 - 值映射,则返回 true 。
        Specified by:
        isEmptyインターフェースでMap<K,​V>
        重写:
        isEmpty类 AbstractMap<K,​V>
        结果
        trueこのマップがキーと値のマッピングを含まない場合
      • get

        public V get​(Object key)
        指定されたキーがマップされる値を返します。このマップにそのキーのマッピングが含まれていない場合は、null 。

        より正式には、このマップがキーからのマッピングを含む場合k到值vのマッピングで、それにより(key==null ? k==null : key.equals(k)) ,则此方法返回v ; 否则返回null 。 (そのようなマッピングは最大で1つ存在できます。)

        返回值null 不一定マップがキーを含まないことを示すマッピング; 地图也可能将密钥显式映射到null 。 可以使用containsKey操作によって、これら2つの場合を区別します。

        Specified by:
        getインターフェースでMap<K,​V>
        重写:
        get类 AbstractMap<K,​V>
        参数
        key- 関連付けられた値を返すキー
        结果
        指定されたキーがマップされる値。このマップがキーのマッピングを含まない場合、null
        另请参见:
        put(Object, Object)
      • containsKey

        public boolean containsKey​(Object key)
        このマップが指定されたキーのマッピングを含む場合、戻りますtrue 。
        Specified by:
        containsKeyインターフェースでMap<K,​V>
        重写:
        containsKeyクラス内AbstractMap<K,​V>
        参数
        key- このマップ内に存在するかテストするキー
        结果
        trueこのマップが指定されたキーのマッピングを含む場合。
      • put

        public V put​(K key,
                     V value)
        指定された値を、このマップ内の指定されたキーに関連付けます。 マップが以前にキーのマッピングを含んでいた場合、古い値を置き換えます
        Specified by:
        putインターフェースでMap<K,​V>
        重写:
        put授業でAbstractMap<K,​V>
        参数
        key- 指定された値に関連付けられたキー
        value- 指定されたキーに関連付けられた値
        结果
        以前の値に関連付けられたkey ,或null如果没有映射key 。 (A null返回也可以表示该映射以前关联nullとkey )。
      • putAll

        public void putAll​(Map<? extends K,​? extends V> m)
        指定されたマップ内のすべてのマッピングをこのマップにコピーします。 これらのマッピングは、指定されたマップ内に現在存在する任意のキーに対して、このマップが保持していたマッピングを置き換えます。
        Specified by:
        putAllインターフェースでMap<K,​V>
        重写:
        putAllクラス内AbstractMap<K,​V>
        参数
        m- このマップに格納するマッピング
        异常
        NullPointerException- 指定されたマップがnullの場合
      • remove

        public V remove​(Object key)
        このマップから、指定されたキーのマッピング(存在する場合)を削除します。
        Specified by:
        removeインターフェースでMap<K,​V>
        重写:
        removeクラス内AbstractMap<K,​V>
        参数
        key- このマップからマッピングを削除するキー
        结果
        如果没有keyマッピングすると、key或null関連する以前の値。 (A null返回也可以表示该映射以前关联nullとkey )。
      • clear

        public void clear()
        このマップからすべてのマッピングを削除します。 この呼び出しが戻った後、マップは空になります。
        Specified by:
        clearインターフェースでMap<K,​V>
        重写:
        clear課程ではAbstractMap<K,​V>
      • containsValue

        public boolean containsValue​(Object value)
        如果此映射将一个或多个键映射到指定值,则返回 true 。
        Specified by:
        containsValueインターフェースでMap<K,​V>
        重写:
        containsValue类 AbstractMap<K,​V>
        参数
        valueこのマップ内に存在するかテストする値
        结果
        trueこのマップが1つ以上のキーを指定された値にマップする場合
      • keySet

        public Set<K> keySet()
        このマップに含まれるキーを返しますSet视图。 このセットはマップによってサポートされているため、マップへの変更はセットに反映され、その逆も同様です。 如果にに対して集合进行迭代时修改た映射(除いて通过迭代器自分のremove操作)、反復の結果は未定義です。 このセットは要素の削除をサポートします。つまり、マップから対応するマッピングを、経由してIterator.remove , Set.remove , removeAll , retainAll、とclear操作。 它不支持add或addAll操作。
        Specified by:
        keySetインターフェースでMap<K,​V>
        重写:
        keySetクラス内AbstractMap<K,​V>
        结果
        このマップに含まれるキーのセットビュー
      • values

        public Collection<V> values()
        このマップに含まれる値を返しますCollection视图。 このセットはマップによってサポートされているため、マップへの変更はセットに反映され、その逆も同様です。 如果にに対して集合进行迭代时修改た映射(除いて通过迭代器自分のremove操作)、反復の結果は未定義です。 このコレクションは要素の削除をサポートします。つまり、マップ内の対応するマッピングから、経由して。Iterator.remove , Collection.remove , removeAll , retainAllとclear操作。 它不支持add或addAll操作。
        Specified by:
        valuesインターフェースでMap<K,​V>
        重写:
        values授業でAbstractMap<K,​V>
        结果
        このマップに含まれる値のビュー
      • entrySet

        public Set<Map.Entry<K,​V>> entrySet()
        このマップに含まれるマッピングのSet视图。 このセットはマップによってサポートされているため、マップへの変更はセットに反映され、その逆も同様です。 如果にに対して集合进行迭代时修改た映射(除いて通过迭代器自分のremove操作、またはイテレータによって返されるマップエントリ上のsetValue操作)、反復の結果は未定義です。 このセットは要素の削除をサポートします。つまり、マップから対応するマッピングを、経由してIterator.remove , Set.remove , removeAll , retainAllとclear操作。 它不支持add或addAll操作。
        Specified by:
        entrySetインターフェースでMap<K,​V>
        结果
        このマップに含まれるマッピングのセットビュー
      • computeIfAbsent

        public V computeIfAbsent​(K key,
                                 Function<? super K,​? extends V> mappingFunction)
        指定されたキーがまだ値に関連付けられていない場合(またはマッピングされている場合null)、指定されたマッピング関数を使用してその値を計算し、このマップに入力しようとします。ただし、null 。

        如果映射函数返回null ,则不记录映射。 マッピング関数自体が(チェックされない)例外をスローした場合、例外を再スローし、マッピングは記録されません。 最も一般的な使用方法は、初期マッピング値やメモ化された結果として使用する新しいオブジェクトを構築することです。例:

           map.computeIfAbsent(key, k -> new Value(f(k)));  

        或者实现一个多值映射Map<K,Collection<V>> ,每个键支持多个值:

           map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);  

        マッピング関数は計算中にこのマップを変更してはなりません。

        計算中にマッピング関数がそのマップを変更したことが検出された場合、このメソッドはベストエフォートベースでスローします。ConcurrentModificationException 。

        Specified by:
        computeIfAbsentインターフェースでMap<K,​V>
        参数
        key- 指定された値に関連付けられたキー
        mappingFunction- 値の計算に使用するマッピング関数
        结果
        指定されたキーに関連付けられた現在の(既存または計算済みの)値。計算された値がnullの場合はnull
        异常
        ConcurrentModificationException- マッピング関数がこのマップを変更したことが検出された場合
      • computeIfPresent

        public V computeIfPresent​(K key,
                                  BiFunction<? super K,​? super V,​? extends V> remappingFunction)
        指定されたキーの値が存在し、nullでない場合、そのキーと現在のマッピング値を使用して新しいマッピングの計算を試みます。

        如果重映射函数返回null ,则删除映射。 リマッピング関数自体が(チェックされない)例外をスローした場合、その例外を再スローし、現在のマッピングを変更しないままにします。

        再マッピング関数は、計算中にこのマップを変更すべきではありません。

        再マッピング関数が計算中にこのマッピングを変更したことが検出された場合、このメソッドはベストエフォート方式でスローします。ConcurrentModificationException 。

        Specified by:
        computeIfPresentインターフェースでMap<K,​V>
        参数
        key- 指定された値に関連付けられたキー
        remappingFunction- 値の計算に使用する再マッピング関数
        结果
        指定されたキーに関連付けられた新しい値。ない場合はnullを返す
        异常
        ConcurrentModificationException- 再マッピング関数がこのマップを変更したことが検出された場合
      • compute

        public V compute​(K key,
                         BiFunction<? super K,​? super V,​? extends V> remappingFunction)
        指定されたキーとその現在のマッピング値のマッピングを計算しようとします(現在のマッピングがない場合は、null )。 例如,要创建或附加String消息到值映射:
           map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg)) 
        (方法merge()通常、このような目的にはより簡単に使用できます。)

        如果重映射函数返回null、マッピングを削除します(または最初に存在しない場合は存在しないままにします)。 リマッピング関数自体が(チェックされない)例外をスローした場合、その例外を再スローし、現在のマッピングを変更しないままにします。

        再マッピング関数は、計算中にこのマップを変更すべきではありません。

        再マッピング関数が計算中にこのマップを変更したことが検出された場合、このメソッドは最善を尽くして例外をスローします。ConcurrentModificationException 。

        Specified by:
        computeインターフェースでMap<K,​V>
        参数
        key- 指定された値に関連付けられたキー
        remappingFunction- 値の計算に使用する再マッピング関数
        结果
        指定されたキーに関連付けられた新しい値。ない場合はnullを返す
        异常
        ConcurrentModificationException- 再マッピング関数がこのマップを変更したことが検出された場合
      • merge

        public V merge​(K key,
                       V value,
                       BiFunction<? super V,​? super V,​? extends V> remappingFunction)
        指定されたキーがまだ値に関連付けられていないか、null に関連付けられている場合、指定された非 null 値に関連付けます。 そうでない場合は、関連する値を指定された再マッピング関数の結果で置き換えるか、または結果がnull则将其删除。 複合キーに複数のマッピング値がある場合、このメソッドは有用です。 例如,要创建或附加String msg到值映射:
           map.merge(key, msg, String::concat)  

        如果重映射函数返回null ,则删除映射。 リマッピング関数自体が(チェックされない)例外をスローした場合、その例外を再スローし、現在のマッピングを変更しないままにします。

        再マッピング関数は、計算中にこのマップを変更すべきではありません。

        再マッピング関数が計算中にこのマッピングを変更したことが検出された場合、このメソッドはベストエフォート方式でスローします。ConcurrentModificationException 。

        Specified by:
        mergeインターフェースでMap<K,​V>
        参数
        key- 結果の値に関連付けられたキー
        value- キーに関連付けられた既存の値とマージする非null値。あるいは、既存の値がないか、キーに関連付けられた値がnullの場合、キーに関連付ける値
        remappingFunction- 値が存在する場合に再計算するための再マッピング関数
        结果
        指定されたキーに関連付けられた新しい値。キーに関連付けられた値がない場合はnullを返す
        异常
        ConcurrentModificationException- 再マッピング関数がこのマップを変更したことが検出された場合
      • clone

        public Object clone()
        返回此 HashMapインスタンスのシャローコピー:キーと値自体はクローンされません。
        重写:
        clone类 AbstractMap<K,​V>
        结果
        このマップのシャローコピー
        另请参见:
        Cloneable