扫码一下
查看教程更方便
这个类实现了 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