教程 > Java 教程 > Java 高级 阅读:11

Java IdentityHashMap 类

返回 Java 集合框架


这个类实现了 AbstractMap 接口。 它与 HashMap 类似,只是它在比较元素时使用引用相等。

此类不是通用 Map 实现。 虽然这个类实现了 Map 接口,但它故意违反了 Map 的一般契约,该契约要求在比较对象时使用 equals 方法。

此类仅在需要引用相等语义的极少数情况下使用。 此类为基本操作(get 和 put)提供恒定时间性能,假设系统身份哈希函数 (System.identityHashCode(Object)) 将元素正确地分散在桶中。

此类有一个调整参数(影响性能但不影响语义):预期的最大大小。 此参数是映射预计持有的键值映射的最大数量。

以下是 IdentityHashMap 支持的构造函数列表。

序号 构造函数 描述
1 IdentityHashMap() 此构造函数构造一个新的空 IdentityHashMap ,其具有默认的预期最大大小 (21)。
2 IdentityHashMap(int expectedMaxSize) 此构造函数构造一个具有指定预期最大大小的新的空 IdentityHashMap。
3 IdentityHashMap(Map m) 此构造函数构造一个新的 IdentityHashMap,其中包含指定映射中的键值映射。

除了继承自其父类的方法外,IdentityHashMap 还定义了以下方法

序号 方法 描述
1 void clear() 从此Map中删除所有映射。
2 Object clone() 返回此 IdentityHashMap 的浅表副本:键和值本身没有被克隆。
3 boolean containsKey(Object key) 测试指定的对象引用是否是此 IdentityHashMap 中的键。
4 boolean containsValue(Object value) 测试指定的对象引用是否是此标识哈希Map中的值。
5 Set entrySet() 返回此Map中包含的映射的集合视图。
6 boolean equals(Object o) 比较指定对象与此映射是否相等。
7 Object get(Object key) 返回此 IdentityHashMap 中指定键映射到的值,如果映射不包含此键的映射,则返回 null。
8 int hashCode() 返回此Map的哈希码值。
9 boolean isEmpty() 如果此 IdentityHashMap 不包含键值映射,则返回 true。
10 Set keySet() 返回此映射中包含的键的基于身份的集合视图。
11 Object put(Object key, Object value) 将指定值与此 IdentityHashMap 中的指定键相关联。
12 void putAll(Map t) 将所有Map从指定映射复制到此映射。 这些映射将替换此映射对当前指定映射中的任何键的任何映射。
13 Object remove(Object key) 如果存在,则从此Map中删除此键的映射。
14 int size() 返回此 IdentityHashMap 中的键值映射的数量。
15 Collection values() 返回此Map中包含的值的集合视图。

示例

以下程序说明了此集合支持的几种方法

import java.util.*;
public class IdentityHashMapDemo {

   public static void main(String args[]) {
      IdentityHashMap ihm = new IdentityHashMap();
 
      ihm.put("Zara", new Double(3434.34));
      ihm.put("Mahnaz", new Double(123.22));
      ihm.put("Ayan", new Double(1378.00));
      ihm.put("Daisy", new Double(99.22));
      ihm.put("Qadir", new Double(-19.08));
      
      Set set = ihm.entrySet();
      
      // 获取迭代器
      Iterator i = set.iterator();
      
      // 显示元素
      while(i.hasNext()) {
         Map.Entry me = (Map.Entry)i.next();
         System.out.print(me.getKey() + ": ");
         System.out.println(me.getValue());
      }
      System.out.println();
      
      // Deposit 1000 into Zara's account
      double balance = ((Double)ihm.get("Zara")).doubleValue();
      ihm.put("Zara", new Double(balance + 1000));
      System.out.println("Zara's new balance: " + ihm.get("Zara"));
   }
}

运行示例

上面代码的运行结果如下

Ayan: 1378.0
Qadir: -19.08
Mahnaz: 123.22
Daisy: 99.22
Zara: 3434.34

Zara's new balance: 4434.34

返回 Java 集合框架

查看笔记

扫码一下
查看教程更方便