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 是最佳結構,它不允許其中包含空值。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP