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 是最佳結構,它不允許其中包含空值。