クラスHashtable<K,V>

java.lang.Object
java.util.Dictionary<K,V>
java.util.Hashtable<K,V>
型パラメータ:
K - このマップによって保持されるキーのタイプ
V - マップされた値のタイプ
すべての実装されたインタフェース:
Serializable, Cloneable, Map<K,V>
直系の既知のサブクラス:
Properties, UIDefaults

public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
このクラスは、ハッシュ表(キーを値にマップ)を実装します。 nullオブジェクト以外であれば、どのオブジェクトでもキーや値に使用することができます。

ハッシュ表にオブジェクトを 納したり、そこから取り出したりするには、キーとして使用するオブジェクトに、hashCodeメソッドとequalsメソッドが実装されていなければなりません。

Hashtableのインスタンスには、その性能に影響を与える2つのパラメータである初期容量および 荷係数があります。 容量はハッシュ表のバケット数であり、初期容量は単純にハッシュ表が作成された時点での容量です。 ハッシュ表はオープンであることに注意してく さい。「ハッシュの衝突」という、1つのバケットが複数のエントリを 納する現象があり、その 合それらのエントリはシーケンシャル・サーチされることになります。  荷係数は、ハッシュ表がどの程度いっぱいになると、その容量が自動的に増 されるかの基準です。 初期容量と 荷係数パラメータは、実装のヒントに過ぎません。 rehashメソッドがいつ呼び出されるか、および呼び出されるかどうかは、実装により異なります。

通常、デフォルトの 荷係数(.75)では、時間コストとスペース・コストの釣合いを取ります。 値を大きくすると 域のオーバーヘッドは減少しますが、エントリ(getputなど、ほとんどのHashtable操作に反 されます)の検索にかかる時間が長くなります。

初期容量により、浪費スペースと(時間のかかる) rehashオペレーションの需要との間の釣合いが制御されます。 初期容量が、Hashtableに含まれる最大エントリ数をその 荷係数で除算した 合、rehash操作は「永 」になりません。 た し、初期容量を高く設定しすぎると、スペースの浪費になります。

Hashtableに多くのエントリを入れる 合は、この表を十分に大きな容量で作成する方が、必要に応じてハッシュを自動的にやり直して表を大きくするよりも、エントリを効率的に挿入することができます。

この例は、数値のハッシュ表を作成します。 この例では、数値の名前をキーとして使います。

   
   Hashtable<String, Integer> numbers
     = new Hashtable<String, Integer>();
   numbers.put("one", 1);
   numbers.put("two", 2);
   numbers.put("three", 3);

数値を取り出すには、次のコードを使います。

   
   Integer n = numbers.get("two");
   if (n != null) {
     System.out.println("two = " + n);
   }

このクラスの"コレクション表示メソッド"のすべてによって返されるコレクションのiteratorメソッドによって返されるイテレータは、fail-fastです: イテレータの作成後にHashtableが構 的に変更された 合、イテレータ独自のremoveメソッド以外のすべての方法で、イテレータはConcurrentModificationExceptionをスローします。 このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、た ちにかつ手際よく例外をスローします。 Hashtableのkeysおよびelementsメソッドによって返される列挙は、高速ではありません。ハッシュ表が列挙の作成後にいつでも構 的に変更される 合、列挙の結果は定義されません。

通常、非同期の並行変更がある 合、確かな保証を行うことは不可能なので、イテレータのフェイルファストの動作を保証することはできません。 フェイルファスト・イテレータは、ベスト・エフォート・ベースでConcurrentModificationExceptionをスローします。 したがって、正確を期すためにこの例外に依存するプログラ を書くことは誤りです。イテレータのフェイルファストの動作はバグを検出するためにのみ使用すべきです。

このクラスは、Java 2プラットフォー v1.2の時点でMapインタフェースを実装するように改良された結果、Java Collections Frameworkのメンバーとなりました。 新しいコレクションの実装とは異なり、Hashtableは同期をとります。 スレッドセーフな実装が必要ない 合は、Hashtableの代わりにHashMapを使用することをお薦めします。 スレッドセーフで高度な並列実装が必要な 合は、Hashtableの代わりにConcurrentHashMapを使用することをお薦めします。

導入されたバージョン:
1.0
関連 目:
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    デフォルトの初期容量(11)と 荷係数(0.75)で新規の空のハッシュ表を生成します。
    Hashtable(int initialCapacity)
    指定された初期容量およびデフォルトの 荷係数(0.75)で新しい空のハッシュ表を生成します。
    Hashtable(int initialCapacity, float loadFactor)
    指定された初期容量と 荷係数で新しい空のハッシュ表を生成します。
    Hashtable(Map<? extends K, ? extends V> t)
    指定されたMapと同じマッピングで新しいハッシュ表を生成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    このハッシュ表をクリアして、キーがない状態にします。
    ハッシュ表のコピーを作成します。
    compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
    指定されたキーとその現在のマップされた値のマッピングをコンピュートしようとします。現在のマッピング(オプションの操作)がない 合はnullです。
    computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
    指定されたキーが値(または、nullにマップされます。)にま 関連付けられていない 合、指定されたマッピング関数を使用してその値をコンピュートし、null (オプションの操作)でないかぎりこのマップに入力します。
    computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
    指定されたキーの値が存在し、null以外の 合は、キーとその現在のマップされた値(オプションの操作)を指定して、新しいマッピングのコンピュートを試みます。
    boolean
    指定された値にマップされているキーが、ハッシュ表にあるかどうかを判定します。
    boolean
    指定されたオブジェクトが、ハッシュ表のキーかどうかを判定します。
    boolean
    このハッシュ表が1つまたは複数のキーをこの値にマッピングする 合にtrueを返します。
    ハッシュ表にある値のリストを返します。
    このマップに含まれるマッピングのSetビューを返します。
    boolean
    Mapインタフェースでの定義に従って、指定されたObjectとこのMapを比較して等しいかどうかを判定します。
    get(Object key)
    指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない 合はnullを返します。
    int
    Mapインタフェースの定義に従って、このMapのハッシュ・コード値を返します。
    boolean
    値にマップされているキーが、ハッシュ表にあるかどうかを判定します。
    ハッシュ表にあるキーのリストを返します。
    このマップに含まれるキーのSetビューを返します。
    merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)
    指定されたキーがま 値に関連付けられていない 合、またはnullに関連付けられている 合は、指定されたnull以外の値(オプションの操作)に関連付けます。
    put(K key, V value)
    このハッシュ表で、指定されたkeyを指定されたvalueにマップします。
    void
    putAll(Map<? extends K, ? extends V> t)
    指定したマップからこのハッシュ表にすべてのマッピングをコピーします。
    protected void
    ハッシュ表の容量を増やし、それを内部的に再編成して、エントリを調整してアクセスをより効率的にします。
    キー(およびそれに対応する値)をハッシュ表から削除します。
    int
    ハッシュ表にあるキーの数を返します。
    このHashtableオブジェクトの文字列表現を、エントリのセット(中括弧で囲まれ、ASCII文字"" (コンマとスペース)で区切られた)の形式で返します。
    このマップに含まれる値のCollectionビューを返します。

    クラスjava.lang.Objectで宣言されたメソッド

    finalize, getClass, notify, notifyAll, wait, wait, wait

    インタフェースjava.util.Mapで宣言されたメソッド

    forEach, getOrDefault, putIfAbsent, remove, replace, replace, replaceAll
  • コンストラクタの詳細

    • Hashtable

      public Hashtable(int initialCapacity, float loadFactor)
      指定された初期容量と 荷係数で新しい空のハッシュ表を生成します。
      パラメータ:
      initialCapacity - ハッシュ表の初期容量。
      loadFactor - ハッシュ表の 荷係数。
      スロー:
      IllegalArgumentException - 初期容量がゼロよりも小さい 合、または 荷係数が正でない 合。
    • Hashtable

      public Hashtable(int initialCapacity)
      指定された初期容量およびデフォルトの 荷係数(0.75)で新しい空のハッシュ表を生成します。
      パラメータ:
      initialCapacity - ハッシュ表の初期容量。
      スロー:
      IllegalArgumentException - 初期容量が0よりも小さい 合。
    • Hashtable

      public Hashtable()
      デフォルトの初期容量(11)と 荷係数(0.75)で新規の空のハッシュ表を生成します。
    • Hashtable

      public Hashtable(Map<? extends K, ? extends V> t)
      指定されたMapと同じマッピングで新しいハッシュ表を生成します。 指定されたMapのマッピングを保持するのに十分な初期容量、およびデフォルトの 荷係数(0.75)で、ハッシュ表は作成されます。
      パラメータ:
      t - マッピングがこのマップに配置されるマップ。
      スロー:
      NullPointerException - 指定されたマップがnullの 合。
      導入されたバージョン:
      1.2
  • メソッドの詳細

    • size

      public int size()
      ハッシュ表にあるキーの数を返します。
      定義:
      インタフェースMap<K,V>内のsize
      定義:
      クラスDictionary<K,V>size
      戻り値:
      ハッシュ表にあるキーの数。
    • isEmpty

      public boolean isEmpty()
      値にマップされているキーが、ハッシュ表にあるかどうかを判定します。
      定義:
      インタフェースMap<K,V>内のisEmpty
      定義:
      クラスDictionary<K,V>isEmpty
      戻り値:
      値にマップされているキーがハッシュ表にない 合はtrue、ある 合はfalse
    • keys

      public Enumeration<K> keys()
      ハッシュ表にあるキーのリストを返します。 戻されたオブジェクトの列挙メソッドを使用して、キーを 番にフェッチします。 キーの列挙中にハッシュ表が構 的に変更された 合、列挙の結果は未定義です。
      定義:
      クラスDictionary<K,V>keys
      戻り値:
      ハッシュ表にあるキーのリスト。
      関連 目:
    • elements

      public Enumeration<V> elements()
      ハッシュ表にある値のリストを返します。 これらの要 を 次に取り出すには、Enumerationのメソッドを使用します。 ハッシュテーブルが値の列挙中に構 的に変更された 合、列挙の結果は未定義です。
      定義:
      クラスDictionary<K,V>elements
      戻り値:
      ハッシュ表にある値のリスト。
      関連 目:
    • contains

      public boolean contains(Object value)
      指定された値にマップされているキーが、ハッシュ表にあるかどうかを判定します。 この操作は、containsKeyメソッドよりも 荷がかかります。

      このメソッドは、機能の点でcontainsValue (コレクション・フレー ワークのMapインタフェースの一部)と同じです。

      パラメータ:
      value - 検索する値
      戻り値:
      equalsメソッドで決定されるこのハッシュ表のvalue引数に一部のキーがマップされている 合のみ、true。それ以外の 合はfalse
      スロー:
      NullPointerException - 値がnullの 合
    • containsValue

      public boolean containsValue(Object value)
      このハッシュ表が1つまたは複数のキーをこの値にマッピングする 合にtrueを返します。

      このメソッドは、機能の点でcontains (Mapインタフェースに先行する)と同じです。

      定義:
      インタフェースMap<K,V>内のcontainsValue
      パラメータ:
      value - ハッシュ表にあるかどうかを判定される値
      戻り値:
      このマップが1つまたは複数のキーを指定された値にマッピングしている 合はtrue
      スロー:
      NullPointerException - 値がnullの 合
      導入されたバージョン:
      1.2
    • containsKey

      public boolean containsKey(Object key)
      指定されたオブジェクトが、ハッシュ表のキーかどうかを判定します。
      定義:
      インタフェースMap<K,V>内のcontainsKey
      パラメータ:
      key - 使用可能なキー
      戻り値:
      trueは、指定したオブジェクトがequalsメソッドによって決定されるこのハッシュ表のキーである 合にのみ、falseです。それ以外の 合はfalseです。
      スロー:
      NullPointerException - キーがnullの 合
      関連 目:
    • get

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

      つまり、このメソッドは、(key.equals(k))となるキーkから値vへのマッピングがこのマップに含まれている 合はvを返し、それ以外の 合はnullを返します。 (このようなマッピングは1つのみ存在できます。)

      定義:
      インタフェースMap<K,V>内のget
      定義:
      クラスDictionary<K,V>get
      パラメータ:
      key - 関連付けられた値が返されるキー
      戻り値:
      指定されたキーがマップされている値。そのキーのマッピングがこのマップに含まれていない 合はnull
      スロー:
      NullPointerException - 指定されたキーがnullである 合
      関連 目:
    • rehash

      protected void rehash()
      ハッシュ表の容量を増やし、それを内部的に再編成して、エントリを調整してアクセスをより効率的にします。 ハッシュ表にあるキーの数がハッシュ表の容量と 荷係数を超えると、このメソッドが自動的に呼び出されます。
    • put

      public V put(K key, V value)
      このハッシュ表で、指定されたkeyを指定されたvalueにマップします。 キーや値はnullにすることはできません。

      valueを取得するには、元のkeyに等しいkeyを指定してgetメソッドを呼び出します。

      定義:
      インタフェースMap<K,V>内のput
      定義:
      クラスDictionary<K,V>put
      パラメータ:
      key - ハッシュ表キー
      value - 値
      戻り値:
      ハッシュ表の指定されたキーの前の値。それがない 合はnull
      スロー:
      NullPointerExceptionキーまたは値がnullの 合
      関連 目:
    • remove

      public V remove(Object key)
      キー(およびそれに対応する値)をハッシュ表から削除します。 そのキーがハッシュ表にない 合は、何も行いません。
      定義:
      インタフェースMap<K,V>内のremove
      定義:
      クラスDictionary<K,V>remove
      パラメータ:
      key - 削除するキー
      戻り値:
      ハッシュ表でそのキーにマップされている値。マップされている値がない 合はnull
      スロー:
      NullPointerException - キーがnullの 合
    • putAll

      public void putAll(Map<? extends K, ? extends V> t)
      指定したマップからこのハッシュ表にすべてのマッピングをコピーします。 これにより、ハッシュ表が指定されたマップ内に現在あるキーのすべてに対して持っていたマッピングが置き換えられます。
      定義:
      インタフェースMap<K,V>内のputAll
      パラメータ:
      t - このマップに 納されるマッピング
      スロー:
      NullPointerException - 指定されたマップがnullの 合
      導入されたバージョン:
      1.2
    • clear

      public void clear()
      このハッシュ表をクリアして、キーがない状態にします。
      定義:
      インタフェースMap<K,V>内のclear
    • clone

      public Object clone()
      ハッシュ表のコピーを作成します。 ハッシュ表の構 自体はすべてコピーされますが、キーおよび値は複製されません。 これは、比較的 担の大きい操作です。
      オーバーライド:
      clone、クラスObject
      戻り値:
      ハッシュ表の複製
      関連 目:
    • toString

      public String toString()
      このHashtableオブジェクトの文字列表現を、エントリのセット(中括弧で囲まれ、ASCII文字"" (コンマとスペース)で区切られた)の形式で返します。 各エントリは、キー、等号=および関連する要 としてレンダリングされ、toStringメソッドを使用してキーおよび要 を文字列に変換します。
      オーバーライド:
      toString、クラスObject
      戻り値:
      このハッシュ表の文字列表現
    • keySet

      public Set<K> keySet()
      このマップに含まれるキーのSetビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反 され、また、セットに対する変更はマップに反 されます。 セットの反復処理中にマップが変更された 合、反復処理の結果は定義されていません(イテレータ自身のremoveオペレーションを除く)。 セットは要 の削除をサポートします。Iterator.removeSet.removeremoveAllretainAll、およびclearオペレーションで対応するマッピングをマップから削除します。 addまたはaddAll操作はサポートされていません。
      定義:
      インタフェースMap<K,V>内のkeySet
      戻り値:
      マップに含まれているキーのセット・ビュー
      導入されたバージョン:
      1.2
    • entrySet

      public Set<Map.Entry<K,V>> entrySet()
      このマップに含まれるマッピングのSetビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反 され、また、セットに対する変更はマップに反 されます。 セットの反復処理中にマップが変更された 合、反復処理の結果は定義されません(イテレータ自身のremoveオペレーション、またはイテレータにより返されるマップ・エントリに対するsetValueオペレーションを除く)。 セットは要 の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.removeSet.removeremoveAllretainAll、およびclearオペレーションを通して行います。 addまたはaddAll操作はサポートされていません。
      定義:
      インタフェースMap<K,V>内のentrySet
      戻り値:
      マップ内に保持されているマッピングのセット・ビュー
      導入されたバージョン:
      1.2
    • values

      public Collection<V> values()
      このマップに含まれる値のCollectionビューを返します。 コレクションはマップと連動しているので、マップに対する変更はコレクションに反 され、またコレクションに対する変更はマップに反 されます。 コレクションの反復処理中にマップが変更された 合、反復処理の結果は定義されません(イテレータ自身のremoveオペレーションを除く)。 コレクションは要 の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.removeCollection.removeremoveAllretainAll、およびclearオペレーションを通して行います。 addまたはaddAll操作はサポートされていません。
      定義:
      インタフェースMap<K,V>内のvalues
      戻り値:
      マップ内に含まれている値のコレクション・ビュー
      導入されたバージョン:
      1.2
    • equals

      public boolean equals(Object o)
      Mapインタフェースでの定義に従って、指定されたObjectとこのMapを比較して等しいかどうかを判定します。
      定義:
      インタフェースMap<K,V>内のequals
      オーバーライド:
      equals、クラスObject
      パラメータ:
      o - Hashtableと等しいかどうかを比較するオブジェクト
      戻り値:
      指定されたObjectがこのMapと等しい 合はtrue
      導入されたバージョン:
      1.2
      関連 目:
    • hashCode

      public int hashCode()
      Mapインタフェースの定義に従って、このMapのハッシュ・コード値を返します。
      定義:
      インタフェースMap<K,V>内のhashCode
      オーバーライド:
      hashCode、クラスObject
      戻り値:
      マップのハッシュ・コード値
      導入されたバージョン:
      1.2
      関連 目:
    • computeIfAbsent

      public V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
      指定されたキーが値(または、nullにマップされます。)にま 関連付けられていない 合、指定されたマッピング関数を使用してその値をコンピュートし、null (オプションの操作)でないかぎりこのマップに入力します。

      マッピング関数がnullを返す 合、マッピングは記録されません。 マッピング関数自体が(unchecked)例外をスローした 合、例外は再スローされ、マッピングは記録されません。 もっとも一般的な用途は、次のように初期のマップされた値またはメモ化された結果として機能する新しいオブジェクトを構築することです。

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

      または、1つのキーで複数の値をサポートする複数値マップMap<K,Collection<V>>を実装することです。

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

      マッピング関数は、計算中にこのマップを変更しないでく さい。

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

      定義:
      インタフェースMap<K,V>内のcomputeIfAbsent
      パラメータ:
      key - 指定された値が関連付けられるキー
      mappingFunction - 値をコンピュートするマッピング関数
      戻り値:
      指定されたキーに関連付けられている現在の(既存の、または計算された)値。計算された値がnullである 合はnull
      スロー:
      ConcurrentModificationException - マップ機能がこのマップを変更したことが検出された 合
    • computeIfPresent

      public V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
      指定されたキーの値が存在し、null以外の 合は、キーとその現在のマップされた値(オプションの操作)を指定して、新しいマッピングのコンピュートを試みます。

      再マッピング関数がnullを返す 合、マッピングは削除されます。 再マッピング関数自体が(unchecked)例外をスローした 合、例外は再スローされ、現在のマッピングは変更されません。

      再マッピング関数は、計算中にこのマップを変更しないでく さい。

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

      定義:
      インタフェースMap<K,V>内のcomputeIfPresent
      パラメータ:
      key - 指定された値が関連付けられるキー
      remappingFunction - 値をコンピュートするための再マップ関数
      戻り値:
      指定されたキーに関連付けられる新しい値。存在しない 合はnull
      スロー:
      ConcurrentModificationException - リマッピング機能がこのマップを変更したことが検出された 合
    • compute

      public V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
      指定されたキーとその現在のマップされた値のマッピングをコンピュートしようとします。現在のマッピング(オプションの操作)がない 合はnullです。 たとえば、次のように、値のマッピングにString msgを作成または追 します。
       
       map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
      (このような目的で使用するmerge()メソッドは、多くの 合、より単純です。)

      再マッピング関数がnullを返した 合、マッピングは削除されます。(最初に 席した 合は不在のままです)。 再マッピング関数自体が(unchecked)例外をスローした 合、例外は再スローされ、現在のマッピングは変更されません。

      再マッピング関数は、計算中にこのマップを変更しないでく さい。

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

      定義:
      インタフェースMap<K,V>内のcompute
      パラメータ:
      key - 指定された値が関連付けられるキー
      remappingFunction - 値をコンピュートするための再マップ関数
      戻り値:
      指定されたキーに関連付けられる新しい値。存在しない 合はnull
      スロー:
      ConcurrentModificationException - リマッピング機能がこのマップを変更したことが検出された 合
    • merge

      public V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)
      指定されたキーがま 値に関連付けられていない 合、またはnullに関連付けられている 合は、指定されたnull以外の値(オプションの操作)に関連付けます。 それ以外の 合は、指定された再マッピング関数の結果で関連する値を置換し、結果がnullの 合は削除します。 このメソッドは、1つのキーに対する複数のマップされた値を結合するときに使用できます。 たとえば、次のように、値のマッピングにString msgを作成または追 します。
       
       map.merge(key, msg, String::concat)
       

      再マッピング関数がnullを返す 合、マッピングは削除されます。 再マッピング関数自体が(unchecked)例外をスローした 合、例外は再スローされ、現在のマッピングは変更されません。

      再マッピング関数は、計算中にこのマップを変更しないでく さい。

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

      定義:
      インタフェースMap<K,V>内のmerge
      パラメータ:
      key - 結果値が関連付けられるキー
      value - キーに関連付けられた既存の値にマージされるnull以外の値。既存の値がない 合、またはキーにnull値が関連付けられている 合は、キーに関連付けられるnull以外の値
      remappingFunction - 存在する 合に値を再計算するための再マッピング関数
      戻り値:
      指定されたキーに関連付けられた新しい値。キーに値が関連付けられなかった 合はnull
      スロー:
      ConcurrentModificationException - リマッピング機能がこのマップを変更したことが検出された 合