Javaの場合IdentityHashMapとHashMapの違いは何ですか+パフォーマンスの比較

公開: 2021-10-19
同一性ハッシュマップとハッシュマップパフォーマンスの比較の違い

いつか、 equality operator (==)に基づいてマップのキーを比較しなければならないという特殊なケースがあります。 等式演算子(==)は、2つのキーの参照(メモリ内のアドレス)を2つの異なる数値として比較します。

一方、HashMapは、 equals()メソッドを使用してキーの一意性を比較する最もよく使用されるJavaコレクションフレームワークコンポーネントです。

また、 IdentityHashMapobject.hashCode()からのハッシュを使用しませんが、 System.identityHashCode(object)を使用します。 実行時にハッシュコードが変更される可変オブジェクトには、IdentityHashMapを使用できます。

on String Objectに適用されるequals()==について詳しく知りたい場合は、次のチュートリアルに従ってください:https://crunchify.com/how-to-override-equals-and-hashcode-method-in-java/。

上記のequals()および==の動作を示す基本テスト:

結果:

両方のマップでパフォーマンステストを実行してみましょう。

  1. Javaクラスの作成: CrunchifyIdentityHashMapVsHashMapPerformance .java
  2. startCrunchifyTest()
    • ランダムマップサイズを数百万単位で生成します
    • crunchifyString[]文字列のインスタンス化と初期化上記で生成された乱数とテキストの配列オブジェクト: This is Crunchify's Test # number
  3. crunchifyCompareIdentityHashMapVsHashMap(String[] crunchifyString , Map<String, Integer> crunchifyMap , String name )
    • 必要なすべてのパラメーターをこのメソッドに渡します
    • crunchifyMap値はIdentityHashMap / HashMapになります
    • crunchifyString []を反復処理し、値をMapに配置します—この操作には時間がかかります
    • crunchifyString []を反復処理し、Mapから値を取得します—この操作には時間がかかります
    • 上記の両方の操作の実行時間を調べて、どちらが上記の操作に適しているかを比較できるようにしますか? IdentityHashMapまたはHashMap
    • 上記の結果を印刷
  4. 上記のタスク2と3を合計8回実行します。

結果:

観察:

結果としてここに表示されているように、大きなマップの場合、IdentityHashMapのパフォーマンスははるかに優れています。 なんで? IdentityHashMap doesn't use equals() and hashcode() methods

参考までに:

Mapとの間で値を出し入れするために行っている上記の操作は、CPUに非常に負荷がかかります。

IdentityHashMapとHashMapのテスト-CPU使用率