java 中的 HashMap 是 java 集合的一部分。它实现了java的Map接口。它以键和值对的形式存储数据。键应该是唯一的,但值可能是重复的。如果尝试插入重复的键,它将替换相应键的元素。哈希映射类似于哈希表,但它是不同步的。它允许存储空键以及空值,但应该只有一个空键,并且可以有任意数量的空值。

IdentityHashMap 实现了 Map 接口。在比较键(和值)时,它遵循引用相等而不是对象相等。当用户需要通过引用比较对象时,将使用此类。它不同步,必须在外部同步。此类中的迭代器是快速失败的,在迭代时尝试修改时抛出 ConcurrentModificationException

HashMapIdentityHashMap 都是实现 Map 接口的类。但是它们之间存在的区别很少。

示例1: HashMap

// Java program to illustrate
// the working of Java HashMap
// to demonstrate
// internal working difference between them

// Importing HashMap class from
// java.util package
import java.util.HashMap;

// Class
public class YiibaiDemo {

    // Main driver method
    public static void main(String[] args)
    {
        // Creating an empty HashMap object
        HashMap<Integer, String> map = new HashMap<>();

        // Add elements to the map
        // Custom inputs
        map.put(10, "Yiibai");
        map.put(20, "for");
        map.put(30, "geeks");
        map.put(40, "welcome");
        map.put(50, "you");

        // Printing the size of map
        System.out.println("Size of map is: "+ map.size());

        // Printing the HashMap content
        System.out.println("HashMap content: " + map);

        // Removing a key 50
        map.remove(50);

        // Printing the HashMap after the removal
        System.out.println("HashMap after removal : "+ map);
    }
}

运行结果:

Size of map is:- 5
HashMap content: {50=you, 20=for, 40=welcome, 10=Yiibai, 30=geeks}
HashMap after removal : {20=for, 40=welcome, 10=Yiibai, 30=geeks}

示例2:IdentityHashMap

// Java program to illustrate
// working of IdentityHashmap
// to demonstrate
// internal working difference between them

// Importing all classes of
// java.util package
import java.util.*;

// Class for iterating IdentityHashMap
public class YiibaiDemo {

    // Main driver method
    public static void main(String[] args)
    {

        // Creating an empty IdentityHashMap object
        IdentityHashMap<Integer, String> ihmap = new IdentityHashMap<Integer, String>();

        // Mapping string values to int keys
        // Custom inputs --> Custom mappings
        ihmap.put(10, "Yiibai");
        ihmap.put(20, "for");
        ihmap.put(30, "Geeks");
        ihmap.put(40, "Welcomes");
        ihmap.put(50, "You");

        // Display the size of IdentityHashMap
        System.out.println("IdentityHashMap size : " + ihmap.size());

        // Display the IdentityHashMap
        System.out.println("Initial identity hash map: " + ihmap);

        // Create an Iterator over the IdentityHashMap
        Iterator<IdentityHashMap.Entry<Integer, String> >
            itr = ihmap.entrySet().iterator();

        // Condition check using hasNext() method()

        // Condition check using hasNext() method holding
        // true if there is any next element remaining
        while (itr.hasNext()) {

            // next() method which is used to
            // retrieve the next element
            IdentityHashMap.Entry<Integer, String> entry = itr.next();

            // Print and display key and value pairs
            // using getKey() method
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }
    }
}

运行结果:

IdentityHashMap size : 5
Initial identity hash map: {10=Yiibai, 40=Welcomes, 50=You, 30=Geeks, 20=for}
Key = 10, Value = Yiibai
Key = 40, Value = Welcomes
Key = 50, Value = You
Key = 30, Value = Geeks
Key = 20, Value = for

Java中HashMap和IdentityHashMap的区别

编号 HashMap IdentityHashMap
1 HashMap 实现了 Map 接口,但不违反 Map 总合约。 IdentityHashMap 也实现了 Map 接口,但它故意违反了 map 总契约。
2 哈希映射使用对象相等来比较键和值。 IdentityHashMap 使用引用相等性来比较键和值。
3 HashMap 使用 HashMap 类的 hashCode()方法来查找存储桶位置。 IdentityHashMap 不使用 hashCode() 方法,而是使用 System.IdentityHashCode() 方法来查找存储桶位置。
4 哈希图使用链接。 IdentityHashMap 使用一个简单的班轮探测哈希表。
5 为了安全地将对象存储在 HashMap 中,密钥必须是不可变的。 IdentityHashMap 不要求密钥是不可变的。
6 HashMap 的性能略低于 IdentityHashMap。 IdentityHashMap 的性能优于 HashMap。

Java中HashMap和IdentityHashMap的区别

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Java中HashMap和IdentityHashMap的区别
本文链接:https://www.vsdiffer.com/vs/difference-between-hashmap-and-identityhashmap-in-java.html
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。