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