本篇博客实现的是map中,key相同、value不同,但是又想保留所有的记录的情况,比如
map.put("a",1);
map.put("a",2);
// 我们的理想状态: map 中的数据为 {"a":1,"a":2}
但事实上,如果我们用hashmap的话,它只保留了最后一个value:{“a”:1}
要怎么来实现呢?话不多说,直接上代码
public static void main(String[] args) {
HashMap<String, Object> map = new HashMap<>();
// 比较了四种方式
// 1、new IdentityHashMap,插入数据的时候,key 通过 new String() 的方式传入
IdentityHashMap<String, Object> idenNewStringMap = new IdentityHashMap<>();
// 2、new IdentityHashMap,插入数据的时候,key 直接传入
IdentityHashMap<String, Object> idenMap = new IdentityHashMap<>();
// 3、new HashMap,插入数据的时候,key 通过 new String() 的方式传入
HashMap<String, Object> hashNewStringMap = new HashMap<>();
// 4、new HashMap,插入数据的时候,key 直接传入
HashMap<String, Object> hashMap = new HashMap<>();
for(int i = 0; i < 3; i++){
idenNewStringMap.put(new String("a"),i);
idenMap.put("a",i);
hashNewStringMap.put(new String("a"),i);
hashMap.put("b",i);
}
map.put("idenNewStringMap",idenNewStringMap);
map.put("idenMap",idenMap);
map.put("hashNewStringMap",hashNewStringMap);
map.put("hashMap",hashMap);
// 方便我们看结果
JSONObject json = new JSONObject(map);
System.out.println(json.toJSONString());
}
运行结果:
通过运行结果可以看出来,只有 IdentityHashMap,并且插入数据的时候,通过 new String() 的方式,才可以保留所有的数据
这是因为在 new String() 的时候, 即使是相同的key,但是他的地址不同,IdentityHashMap 也会将他们当做不同的 key 来保存
可导入依赖:
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.1-jre</version>
</dependency>