Java 中 HashMap 和 IdentityHashMap 的區別


HashMap 和 IdentityHashMap 都是用於訪問鍵值對的關鍵值資料集。更具體地說。

HashMap 是 Java 集合框架的一部分,它提供了適當的雜湊表資料集的功能。該對映將元素值儲存為鍵或對,這些鍵或對本質上是唯一的識別符號。此對映還允許空值作為非同步類。

IdentityHashMap 是一種特殊的雜湊類,我們用它來處理與引用相等相關的罕見情況。此對映使用“==”運算子比較鍵,而普通雜湊對映為此使用“equals”方法。

儘管這些 HashMap 之間存在一些顯著差異,但我們已在此嘗試進行討論。

輸入

[ ARB, RDD, KOL, DHKA ]

輸出

Insertion Order of objects in HashMap : 
[ ARB, RDD, KOL, DHKA ]
Insertion Order of objects in IdentityHashMap : 
[ ARB, RDD, DHKA, KOL ]

HashMap 和 IdentityHashMap 之間的區別

HashMap

IdentityHashMap

HashMap 使用雜湊表來儲存資料。

在此,我們使用引用相等(== 運算子)與同一個物件記憶體。

元素以任意方式排序。

使用 System.identityHashCode() 作為鍵基礎來過濾唯一物件。

它在恆定時間內工作。

它使用 equals() 和 hashCode() 函式進行更快的查詢。

在這裡我們可以看到,HashMap 是一個特定於操作的過程,它作用於元素相等性。另一方面,IdentityHashMap 透過遵循引用標識來比較首位的鍵值,以處理罕見情況。

使用的方法

使用 hasNext() 方法執行此過程

演算法

在此演算法中,我們將設定一些函式以將元素插入其中。此外,透過宣告一個 set 資料結構,我們將使用迴圈進行長度遍歷以及計時器。

  • 步驟 1 - 開始該過程。

  • 步驟 2 - 宣告輸入輸出流。

  • 步驟 3 - 匯入內建類和宣告的函式。

  • 步驟 4 - 宣告一個公共類。

  • 步驟 5 - 設定函式。

  • 步驟 6 - 進行插入順序。

  • 步驟 7 - 宣告一個數組列表並填充它。

  • 步驟 8 - 宣告 Set 值。

  • 步驟 9 - 按插入方式列印值。

  • 步驟 10 - 宣告一個迴圈來迭代該過程。

  • 步驟 11 - 設定計時器值。

  • 步驟 12 - 執行該過程並獲取輸出值。

  • 步驟 13 - 終止該過程。

語法

語法將首先檢查一個帶有某些整數值的 treeset。之後,我們將宣告一個 identity set 以從這些元素中建立一些對,例如(int,字元),以根據它們的值以及 set 迭代進行過濾。

TreeSet < Integer > STTREE = new TreeSet <> () ;
STTREE . add ( 4 ) ;
STTREE . add ( 5 ) ;
STTREE . add ( 6 ) ;
STTREE . add ( 8 ) ;
STTREE . add ( 4 ) ;

IdentityHashMap < Integer, String > ihmap
   = new IdentityHashMap < Integer, String > () ;
ihmap . put ( 10, "ARB" ) ;
ihmap . put ( 20, "RDD" ) ;
ihmap . put ( 30, "ARBRDD" ) ;
ihmap . put ( 40, "KOLDHKA" ) ;
ihmap . put ( 50, "You" ) ;

PRINT THE VALUE ( "IdentityHashMap size : " + ihmap . size () ) ;
PRINT THE VALUE ( "Initial identity hash map: " + ihmap ) ;
Iterator < IdentityHashMap . Entry < Integer, String > >
   itr = ihmap . entrySet () . iterator () ;
   
while ( itr . hasNext () ) {
   IdentityHashMap . Entry < Integer, String > entry
      = itr . next () ;
   TreeMap < Integer, Integer > MAPTREE = new TreeMap <> () ;
   MAPTREE . put ( 2,5 ) ;
   MAPTREE . put ( 3,6 ) ;
   MAPTREE . put ( 4,6 ) ;
   MAPTREE . put ( 2,3 ) ;
}

使用 hasNext() 方法

在這種方法中,我們將使用 hasNext() 函式對 HashMap 和 IdentityHashMap 執行一些特定操作。hasNext() 是由某些掃描器類編碼的函式,它在記錄中搜索真或假值。

示例

在下面提到的示例中,我們以 identity hashset 的形式獲取了一些輸入,以檢查 treeset 中是否存在某些特定鍵。

import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
import java.util.*;

public class ARBRDD {
   public static void main ( String [] args ){
      IdentityHashMap < Integer, String > identity_hash = 
         new IdentityHashMap < Integer, String > () ;
      
      identity_hash . put ( 10, "ARB" ) ;
      identity_hash . put ( 15, "2022" ) ;  
      identity_hash . put ( 20, "RDD" ) ;
      identity_hash . put ( 25, "ARBRDD" ) ;
      identity_hash . put ( 30, "KOL" ) ;
      
      System.out.println ( "Initial Mappings are : " + identity_hash ) ;
      System.out.println ( "Is the value 'Kol' present? " +  identity_hash . containsValue ( "KOL" ) ) ;
      System.out.println ( "Is the value 'World' present? " + identity_hash . containsValue ( "World" ) ) ;
   }
}

輸出

Initial Mappings are: {30 =KOL, 10 =ARB, 15= 2022, 25= ARBRDD, 20= RDD}
Is the value 'Kol' present? true
Is the value 'World' present? false

結論

在今天的文章中,我們學習了 HashMap 和 IdentityHashMap 之間的一些顯著區別。簡單的 Hash 使用 hashCode() 函式來查詢括號的位置。而 IdentityHashMap 不使用此功能,無需連結元素。

更新於:2023-11-02

173 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告