Java 中 IdentityHashMap、WeakHashMap 和 EnumMap 的區別


IdentityHashMap 是一種特殊的雜湊類,用於處理與引用相等相關的罕見情況。此對映使用“==”運算子比較鍵,而普通雜湊對映為此使用“equals”方法。WeakHashMap 是一種對映介面型別,其中雜湊表將其鍵與弱引用型別的值合併。此型別的對映類不能進一步使用,僅僅是因為缺少引用指標。EnumMap 是一種特殊的對映類,它僅包含列舉鍵。此型別的對映主要用於繼承具有相同鍵值的抽象類。這裡的任務是透過考慮各種引數來區分這些對映結構。

輸入

[ ARB, RDD, KOL,  DHKA ]

輸出

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

IdentityHashMap、WeakHashMap 和 EnumMap 之間的區別

IdentityHashMap

WeakHashMap

EnumMap

在這裡,我們使用引用相等(== 運算子)與相同的物件記憶體。

它使用弱引用作為其鍵,並自動刪除元素。

它可以用所需的鍵作為例項類與列舉物件來實現。

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

弱引用雜湊對映可以隨時收集垃圾值。

它使用列舉鍵實現了最佳化的效能。

它使用 equals() 和 hashCode() 函式實現了更快的查詢。

此過程始終使用動態鍵與對映來向其中插入一些附加資料。

此過程在記憶體方面效率很高,可以執行資料檢索。

在這裡,IdentityHashMap 根據鍵標識比較引用值。而 WeakHashMap 為鍵提供了收集垃圾值的通道。EnumMap 結構專門用於以通用方式最佳化列舉鍵值。

使用的函式

在物件級別使用同步

演算法

在此演算法中,我們聲明瞭一些函式,透過考慮設定值,在陣列列表中執行插入順序。此外,透過使用迴圈進行迭代,我們將為長度遍歷設定時間。

  • 步驟 1 - 開始該過程。

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

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

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

  • 步驟 5 - 設定函式。

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

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

  • 步驟 8 - 宣告 Set 值。

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

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

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

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

  • 步驟 13 - 終止該過程。

語法

在此語法中,我們首先檢查一個 treeset,並用一些整數值填充它們。之後,我們聲明瞭一個對映集,以從這些元素建立一些標識對,以便使用 entrySet() 和 hasNext() 函式在表上根據它們的狀態對其進行過濾。

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 HERE ( " IdentityHashMap size : " + ihmap . size () ) ;
PRINT THE VALUE HERE ( " Initial identity hash map :  "     + ihmap ) ;

Hashtable < Integer, String > table  
   = new Hashtable < Integer, String > () ;
table . put ( 1 , "X" ) ;
table . put ( 2 , "Y" ) ;
table . put ( 3,  "Z" ) ; 
table . put ( 4,  "A" ) ;

for ( Map . Entry m : table . entrySet () )
   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 ) ;
}

使用 ConcurrentModificationException 級別方法

在這種方法中,我們將實現 ConcurrentModificationException 以對這些特定對映執行各種操作。ConcurrentModificationException 是一種快速失敗操作,用於在未經使用者許可的情況下修改迭代值。

示例

在示例中,我們輸入了一些資料元素作為整數和字串,以使用 getKey() 和 getValue() 函式將它們同步到 IdentityHashMap 中。此外,我們已經迭代了輸入並使用 ConcurrentModificationException 更新了它們。

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 > ihmap
         = new IdentityHashMap <Integer, String> () ;
      ihmap . put ( 10, "ARB" ) ;
      ihmap . put ( 20, "RDD" ) ;
      ihmap . put ( 30, "4" ) ;
      ihmap . put( 40, "ARBRDD" ) ;
      ihmap . put ( 50, "You" ) ;
      
      System.out.println ( " IdentityHashMap size : " + ihmap . size () ) ;
      System.out.println ( " Initial identity hash map: " + ihmap ) ;
      
      Iterator < IdentityHashMap . Entry < Integer, String > >
         itr = ihmap . entrySet () . iterator () ;
      while ( itr . hasNext () ){
         IdentityHashMap . Entry < Integer, String > entry = itr. next () ;
         System.out.println ( " Key = " + entry . getKey () + ", Value = " + entry . getValue () ) ;
      }
   }
}

輸出

IdentityHashMap size : 5
Initial identity hash map: {30 =4, 10 =ARB, 40 =ARBRDD, 50 =You, 20 =RDD}
Key = 30, Value = 4
Key = 10, Value = ARB
Key = 40, Value = ARBRDD
Key = 50, Value = You
Key = 20, Value = RDD

結論

在本文中,我們使用 Java 集合框架對 IdentityHashMap、WeakHashMap 和 EnumMap 執行了各種操作,以瞭解它們之間的區別。在對它們執行成功操作後,您可以體驗到在這些對映中使用異常的必要性。其中,EnumMap 是最佳結構,它不允許其中包含空值。

更新於: 2023年11月2日

322 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告