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() 方法执行此过程

Learn Java in-depth with real-world projects through our Java certification course. Enroll and become a certified expert to boost your career.

算法

在此算法中,我们将设置一些函数以将元素插入其中。此外,通过声明一个 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 中是否存在某些特定键。

Open Compiler
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 次查看

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告