今日份鸡汤:努力吧,遇见更好的自己~
问题描述:
今天的一个工作场景,要调用公司其他部门同事提供的接口,他们的接口只支持GET请求方式,然后吧,请求参数中有数组类型,尝试用postman调用了一下他们的接口,发现只有下面截图的方式才可以调通。而我的程序中调用接口使用的是RestTemplate,参数是Map类型的,到此不难发现,要实现这个接口的正常调用,其实就是解决Map中怎么放相同的key元素的问题了。
image.png
问题解决:
那么如何解决Map中怎么放相同的key元素的问题呢?多说无益,来个小demo,一目了然:
程序代码:
public class MapDemo {
public static void main(String[] args) {
/**
* hashMap中插入相同内容的key,value会被覆盖
*/
Map<String, String> hashMap = new HashMap<>();
hashMap.put("hTest", "hValue1");
hashMap.put("hTest", "hValue2");
hashMap.put(new String("hTest"), "hValue3");
System.out.println(hashMap);
/**
* IdentityHashMap中key的内容地址完全相同时,value才会被覆盖
*/
Map<String, String> iHashMap = new IdentityHashMap<>();
iHashMap.put("iTest", "iValue1");
iHashMap.put("iTest", "iValue2");
iHashMap.put(new String("iTest"), "iValue3");
System.out.println(iHashMap);
}
}
运行结果:
image.png
接下来再简单说一下两者的区别吧:
(1)IdentityHashMap使用的是==比较key的值,而HashMap使用的是equals()。
(2)HashMap使用的是hashCode()查找位置,IdentityHashMap使用的是System.identityHashCode(object)。
(3)IdentityHashMap理论上来说速度要比HashMap快一点。
(4)IdentityHashMap中key能重复,但需要注意一点的是key比较的方法是==,所以若要存放两个相同的key,就需要存放不同的地址。
网友评论