ホームページ  >  記事  >  Java  >  JavaでのMapの使い方を詳しく解説

JavaでのMapの使い方を詳しく解説

高洛峰
高洛峰オリジナル
2017-01-19 10:40:331386ブラウズ

Map の概要

キーを値にマップするオブジェクト。マップには重複したキーを含めることはできません。各キーは最大 1 つの値にのみマップできます。このインターフェイスは、インターフェイスではなく完全に抽象クラスである Dictionary クラスを置き換えます。

Map インターフェースには 3 つのコレクション ビューがあり、マップの内容をキー セット、値セット、またはキーと値のマッピング関係セットの形式で表示できます。マッピング順序は、イテレータがマップされたコレクション ビュー上でその要素を返す順序として定義されます。 TreeMap クラスなど、一部のマッピング実装は順序を明示的に保証できますが、HashMap クラスなど、他のマッピング実装は順序を保証しません。

注: 可変オブジェクトをマップキーとして使用する場合は注意が必要です。オブジェクトがマップ内のキーである場合、等号比較に影響を与える方法でオブジェクトの値が変更された場合、マップの動作は未定義になります。この禁止の特殊なケースは、マップ自体をキーとして含めることを禁止することです。マップにはそれ自体を値として含めることができますが、注意してください。このようなマップでは、equals メソッドと hashCode メソッドは明確に定義されなくなりました。

Map インターフェイス:

Map は、キーと値のマッピングを提供します。マップに同じキーを含めることはできず、各キーは 1 つの値のみをマップできます。 Map インターフェイスは、3 種類のセット ビューを提供します。Map のコンテンツは、キー セットのセット、値セットのセット、またはキーと値のマッピングのセットと見なすことができます。

Hashtableクラス

HashtableはMapインターフェースを継承し、キーと値のマッピングのハッシュテーブルを実装します。 null 以外の任意のオブジェクトをキーまたは値として使用できます。

データを追加するには put(key, value) を使用し、データを削除するには get(key) を使用します。これら 2 つの基本操作の時間コストは一定です。ハッシュテーブルは、初期容量と負荷率という 2 つのパラメータを通じてパフォーマンスを調整します。通常、デフォルトの負荷係数 0.75 を使用すると、時間とスペースのバランスがより良くなります。負荷率を増やすとスペースを節約できますが、それに対応する検索時間が増加し、get や put などの操作に影響します。

ハッシュテーブルを使用する簡単な例は次のとおりです。ハッシュテーブルに 1、2、3 を入力します。それらのキーはそれぞれ「one」、「two」、「three」です。 2 などの数値には、対応するキーを使用します:

Hashtable numbers = new Hashtable(); 
numbers.put(“one”, new Integer(1)); 
numbers.put(“two”, new Integer(2)); 
numbers.put(“three”, new Integer(3));

キーとしてのオブジェクトはハッシュ関数を計算することによって対応する値の位置を決定するため、キーとしてのオブジェクトはすべて hashCode メソッドと等しいメソッドを実装する必要があります。 hashCode メソッドと equals メソッドは、ルート クラス Object を継承します。カスタム クラスをキーとして使用する場合、ハッシュ関数の定義に従って、2 つのオブジェクトが同じである場合、つまり obj1.equals( obj2)=true の場合、それらのハッシュコードは同じである必要がありますが、2 つの異なるオブジェクトのハッシュコードが同じである場合、この現象は競合と呼ばれます。ハッシュ テーブルの操作にかかる時間のオーバーヘッドが増加するため、ハッシュ テーブルの操作を高速化するために、明確に定義された hashCode() メソッドを定義するようにしてください。

同じオブジェクトに異なる hashCode がある場合、ハッシュ テーブルの操作で予期しない結果が生じます (予想される get メソッドが null を返す)。この問題を回避するには、1 つのことだけを覚えておく必要があります。それは、equals メソッドと hashCode をオーバーライドすることです。メソッドを 1 つだけ書くのではなく、同時に実行します。

ハッシュテーブルは同期です。


HashMap クラス

HashMap は Hashtable に似ていますが、HashMap が非同期で null、つまり null 値と null キーを許可する点が異なります。ただし、HashMap をコレクションとして扱う場合 (values() メソッドはコレクションを返すことができます)、その反復サブオペレーションの時間オーバーヘッドは HashMap の容量に比例します。したがって、反復操作のパフォーマンスが非常に重要な場合は、HashMap の初期容量を高く設定しすぎたり、負荷率を低く設定しすぎたりしないでください。


WeakHashMap クラス


WeakHashMap は、キーへの「弱参照」を実装する改良された HashMap で、キーが外部から参照されなくなった場合、そのキーは GC によってリサイクルできます。


上記は Java Map インターフェイスの概要であり、Java プログラミングを学習する学生は参照できます。

Java での Map の使用法と関連記事の詳細な説明については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。