在HashMap中,对于两个键值对key1-value1,key2-value2,在key相同(key1.equals(key2)==true)的情况下value1与value2不能共存,有没有一种数据结构使value1与value2共存呢?有,那就是IdentityHashMap.IdentityHashMap在比较键时候不是使用equals方法而是比较两个对象的引用,如果对象引用不同即使对象equals相同,在IdentityHashMap中也会存在两个相同的key.取值的时候同理也是比较键的引用.
案例:
创建两个值相同但是引用不同的String对象作为key,然后向IdentityHashMap中放入key - value1 , key - value2
然后输出map中全部元素,观察map中存在的元素
IdentityHashMap<String, Object> map = new IdentityHashMap<>();
map.put(new String("key"), "value1");
map.put(new String("key"), "value2");
map.entrySet().stream().forEach(entry -> System.out.println("key -> " + entry.getKey() + ",value -> " + entry.getValue()));
输出结果
key -> key,value -> value2
key -> key,value -> value1
IdentityHashMap不是线程安全的,如果我们需要线程安全的IdentityHashMap
我们可以使用jdk封装IdentityHashMap,封装的时机是在IdentityHashMap初始化的时候
private HashMap<String, Object> hashMap = new HashMap<>();
//同步封装
Map synchMap = Collections.synchronizedMap(map);