位置:首页 > Java技术 > Java基础教程 > Java IdentityHashMap类

Java IdentityHashMap类

这个类实现了AbstractMap。它类似于HashMap的不同之处在于它比较元素时使用引用相等。

这个类不是一个通用的Map实现。虽然这个类实现了Map接口,它有意违反Map的常规协定,在比较对象时,它要求使用equals方法。

这个类只有在极少数情况下,其中引用相等语义都需要设计使用。

这个类提供了稳定的性能为基本操作(get和put),假设系统标识哈希函数 (System.identityHashCode(Object)) 适当分散桶中的元素。

这个类有一个调整参数(影响性能,但不是语义):预期最大尺寸。这个参数是map有望保持键 - 值映射的最大数目。

类IdentityHashMap所支持三种构造函数。第一种形式构造一个新的空标识哈希有一个默认的最大预期大小(21)映射:

IdentityHashMap() 

第二种形式构造指定期望的最大尺寸的新的空映射:

IdentityHashMap(int expectedMaxSize) 

第三种形式构造包含指定映射中键 - 值映射关系的新标识哈希映射:

IdentityHashMap(Map m) 

除了从它的父类继承的方法,定义IdentityHashMap所下面的方法:

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

例子:

下面的程序说明了几个由这个集合所支持的方法:

import java.util.*;

public class IdentityHashMapDemo {

   public static void main(String args[]) {
      // Create a hash map
      IdentityHashMap ihm = new IdentityHashMap();
      // Put elements to the map
      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));
      
      // Get a set of the entries
      Set set = ihm.entrySet();
      // Get an iterator
      Iterator i = set.iterator();
      // Display elements
      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
Zara: 3434.34
Qadir: -19.08
Mahnaz: 123.22
Daisy: 99.22

Zara's new balance: 4434.34