原文: https://javatutorial.net/java-identityhashmap-example

IdentityHashMap实现Map接口,并且当检查为k1 == k2时,两个键被认为是相等的(不是通过使用等于方法)。 这本身违反了Map的一般合同,这意味着IdentityHashMap显然不是而非通用Map的实现。 在很多情况下,此类会很有用。

Java `IdentityHashMap`示例 - 图1

IdentityHashMap允许空值和空键以及所有可选的映射操作。 但是,此类不能保证顺序会随着时间的推移保持恒定。

就时间复杂度而言,此类为基本操作提供了恒定时间的性能(例如getput)。

另外,需要注意的是,在必须指定最大大小的意义上,此类不是动态(就像在数组中一样)。 如果映射的大小被充分超过,它将非常昂贵,因此这就是始终提供较大的最大大小的一个好主意。 (比简单的错误要便宜得多!)

Java `IdentityHashMap`示例 - 图2

IdentityHashMap:实现和扩展的内容。

IdentityHashMap中的构造方法

  1. IdentityHashMap():创建一个新的身份哈希映射,默认最大大小为 21。
  2. IndetityHashMap(int ExpectedMaxSize):创建一个具有预期最大大小的新空映射。
  3. IdentityHashMap(Map<? extends K, ? extends V> m):创建一个新的Identity,其映射包含与指定映射相同的映射。

IdentityHashMap中的方法

  1. void clear():从此映射中删除所有映射。
  2. Object clone():返回此标识哈希图的副本(重要的是要注意,键和值本身未克隆)。
  3. boolean containsKey(Object key):如果映射包含指定的键,则返回true,否则返回false
  4. boolean containsValue(Object value):如果映射包含指定值,则返回true,否则返回false
  5. boolean equals(Object o):比较指定对象与此映射是否相等。
  6. V get(Object key):返回指定键所映射到的值;如果映射不包含对该键的映射,则返回null
  7. int hashCode():返回此映射的哈希码值。
  8. boolean isEmpty():如果映射为空,则返回true,否则返回false
  9. V put(K key, V value):将指定值与映射中的指定键关联。
  10. V remove(Object key):删除到映射中指定键的映射(如果存在)。
  11. int size():返回此标识哈希图中的键值映射数。

有关所有方法的文档,请访问 Oracle 官方文档页面

使用上述大多数方法的程序示例:

  1. import java.util.Map;
  2. import java.util.HashMap;
  3. import java.util.IdentityHashMap;
  4. public class IdentityHashMapExample
  5. {
  6. public static void main(String[] args)
  7. {
  8. Map identityHashMap = new IdentityHashMap();
  9. identityHashMap.put("key", "value");
  10. System.out.println("Size of IdentityHashMap: " + identityHashMap.size());
  11. identityHashMap.put("key1", "value1");
  12. System.out.println("Size of IdentityHashMap: " + identityHashMap.size());
  13. System.out.println("Does it contain key 'key1': " + identityHashMap.containsKey("key1"));
  14. System.out.println("Value of key 'key1': " + identityHashMap.get("key1"));
  15. System.out.println("Size of map before clear: " + identityHashMap.size());
  16. identityHashMap.clear();
  17. System.out.println("Size of map after clear: " + identityHashMap.size());
  18. }
  19. }

输出

  1. Size of IdentityHashMap: 1
  2. Size of IdentityHashMap: 2
  3. Does it contain key 'key1': true
  4. Value of key 'key1': value1
  5. Size of map before clear: 2
  6. Size of map after clear: 0