Java 中 HashMap 和 IdentityHashMap 之间的区别

javaobject oriented programmingprogramming

HashMap 和 IdentityHashMap 是用于访问键数据对的键值数据集。更具体地说。

HashMap 是一个 Java 集合框架,它提供了适当的哈希表数据集的功能。该映射将元素值存储为键或键对,这些键或键对本质上是唯一标识符。此映射还允许将空值作为非同步类。

IdentityHashMap 是一种特殊类型的哈希类,我们用它来处理与引用相等相关的罕见情况。此映射使用"= ="运算符比较键,而普通哈希映射使用"equals"方法。

不过,我们试图在这里讨论这些 HashMap 之间存在一些显着差异。

示例


Input :
[ ARB, RDD, KOL, DHKA ]

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

算法

在这个算法中,我们将设置一些函数来执行元素插入操作。此外,通过声明一个集合数据结构,我们将使用循环和计时器进行长度遍历。

  • 步骤 1 - 启动流程。

  • 步骤 2 - 声明输入输出流。

  • 步骤 3 - 导入内置类和声明的函数。

  • 步骤 4 - 声明一个公共类。

  • 步骤 5 - 设置函数。

  • 步骤 6 - 查找插入顺序。

  • 步骤 7 - 声明一个数组列表并填充它。

  • 步骤 8 - 声明集合值。

  • 步骤 9 - 按照插入方式打印值。

  • 步骤 10 - 声明一个循环来迭代该过程。

  • 步骤 11 - 设置计时器值。

  • 步骤 12 - 运行该过程并获取输出值。

  • 步骤 13 - 终止该过程。

语法

语法将首先使用一些整数值检查树集。之后,我们将声明一个身份集,从这些元素中创建一些对作为(int,character),以便根据集合迭代的值对它们进行过滤。


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 () 方法

在此方法中,我们将使用 hashNext () 函数对 HashMap 和 IdentityHashMap 执行一些特定操作。hasNext () 是由某些扫描器类编码的函数,用于搜索记录中的真值或假值。

示例

在下面提到的示例中,我们在身份哈希集的形成过程中获取了一些输入,以检查树集中是否存在某些特定键。


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 不使用此功能,而是将元素链接起来。


相关文章