java map 允许重复_java中key值可以重复的map:IdentityHashMap
在Java中,有一种key值可以重复的map,就是IdentityHashMap。在IdentityHashMap中,判断两个键值k1和 k2相等的条件是 k1 == k2 。在正常的Map 实现(如 HashMap)中,当且仅当满足下列条件时才认为两个键 k1 和 k2 相等:(k1==null ? k2==null : e1.equals(e2))。
IdentityHashMap类利用哈希表实现 Map 接口,比较键(和值)时使用引用相等性代替对象相等性。该类不是 通用 Map 实现!此类实现 Map 接口时,它有意违反 Map 的常规协定,该协定在比较对象时强制使用 equals 方法。此类设计仅用于其中需要引用相等性语义的罕见情况。
在使用IdentityHashMap有些需要注意的地方:
例子1:
IdentityHashMap map =new IdentityHashMap();
map.put(newString("xx"),"first");
map.put(newString("xx"),"second");
for (Entry entry : map.entrySet()) {
System.out.print(entry.getKey() +" ");
System.out.println(entry.getValue());
}
System.out.println("idenMap="+map.containsKey("xx"));
System.out.println("idenMap="+map.get("xx"));
输出结果是:
xx first
xx second
idenMap=false
idenMap=null
例子2:
IdentityHashMap map =new IdentityHashMap();
String fsString =newString("xx");
map.put(fsString,"first");
map.put(newString("xx"),"second");
for(Entry entry : map.entrySet()) {
System.out.print(entry.getKey() +" ");
System.out.println(entry.getValue());
}
System.out.println("idenMap="+map.containsKey(fsString));
System.out.println("idenMap="+map.get(fsString));
输出结果是:
xx second
xx first
idenMap=true
idenMap=first
例子3:
IdentityHashMap map =new IdentityHashMap();
String fsString =newString("xx");
map.put(fsString,"first");
map.put(fsString,"second");
for(Entry entry : map.entrySet()) {
System.out.print(entry.getKey() +" ");
System.out.println(entry.getValue());
}
System.out.println("idenMap="+map.containsKey(fsString));
System.out.println("idenMap="+map.get(fsString));
输出结果是:
xx second
idenMap=true
idenMap=second
例子4:
IdentityHashMap map =new IdentityHashMap();
String fsString =newString("xx");
String secString =newString("xx");
map.put(fsString,"first");
map.put(secString,"second");
for(Entry entry : map.entrySet()) {
System.out.print(entry.getKey() +" ");
System.out.println(entry.getValue());
}
System.out.println("idenMap="+map.containsKey(fsString));
System.out.println("idenMap="+map.get(fsString));
System.out.println("idenMap="+map.containsKey(secString));
System.out.println("idenMap="+map.get(secString));
输出结果是:
xx first
xx second
idenMap=true
idenMap=first
idenMap=true
idenMap=second
例子5:
IdentityHashMap map =new IdentityHashMap();
map.put("xx","first");
map.put("xx","second");
for(Entry entry : map.entrySet()) {
System.out.print(entry.getKey() +" ");
System.out.println(entry.getValue());
}
输出结果是:
xx second
可以看到,在IdentityHashMap中,是判断key是否为同一个对象,而不是普通HashMap的equals方式判断。
参考:http://blog.csdn.net/stoneok07/article/details/7262676
java map 允许重复_java中key值可以重复的map:IdentityHashMap相关推荐
- java不可变类型_Java中的值类型:为什么它们不可变?
java不可变类型 值类型不必是不变的. 但是他们是. 在上一篇文章中,我讨论了Java中指针与引用之间的区别以及如何传递方法参数(按值传递或按引用传递). 这些与Java中尚不存在的值类型密切相关( ...
- java list map 去重复_Java中List集合去除重复数据的六种方法
1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list. ...
- java 有序不重复_Java中自定义有序不重复的集合——SetList
由于课程设计的需要,笔者需要将数据库中的某个表的数据拿出来处理 例如楼层和建筑表,有外键限制 一开始是使用List保存的,但实际操作中发现,从表中取出来楼层数据中的建筑有些是重复的 List接口实现的 ...
- java的幂运算_java中幂指数值的运算
说到幂指数的运算我们就会用到Math.pow(double a,double b),返回的结果是a的b次方. 这个方法可以满足我们大多数幂指数的计算,但是每次访问的值和传入的值都是double,自己不 ...
- C++判断map中key值是否存在
C++ map中key值存在情况判定 1.count函数 count函数用于统计key值在map中出现的次数,map的key不允许重复,因此如果key存在返回1,不存在返回0 if (testMap. ...
- java 中map的优点_java 中map遍历的四种方法和优缺点
/** * 在for-each循环中使用entries来遍历 * 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用 * 如果遍历的是一个空的map,会报数组越界 ,java5引入 ...
- java 可重复map_map的键值可以重复吗
java map的key可以重复吗 如果重复添加的话,hashmap会自动覆盖key一样的数据,保证一个key对应一个value 也就是说,你只要把一个map2里的数据按照key一个一个都加到map1 ...
- el表达式遍历list中的list_EL表达式获取map和list集合中的值 | 学步园
Map的每个对象以key=value的形式给出 当forEach tag的item属性中的表达式的值是java.util.Map时,在var中命名的变量被设置为类型是java.util.Map.Ent ...
- python 下划线转驼峰_json字符串中key值下划线命名转换为驼峰命名
json字符串中key值下划线命名转换为驼峰命名: 例如: 原json串: String json= "{'user_name':'ok','user_sex':0,'object_info ...
最新文章
- C#做的在线升级小程序
- compareto方法_compare方法和compareTo方法区别
- boost::signals2模块实现定制组合器的测试程序
- linux QT 结束当前进程_Qt编写控件属性设计器7-串口采集
- 番茄花园win11 32位官方原版镜像文件v2021.07
- Python | 这是过七夕吗?这是趁机学习一下下,就一下~~
- 【AI视野·今日CV 计算机视觉论文速览 第152期】Fri, 9 Aug 2019
- swap函数_[C++基础入门] 6、函数
- 蓝桥杯BASIC-28 基础练习 Huffuman树
- 自媒体时事热点类素材哪里找?推荐这3个网站
- CV520国产兼容应用及说明
- c语言vs2013下载官方下载,Microsoft Visual C++2013运行库下载
- [图形学]ASTC纹理压缩格式
- 银河帝国----基地前奏
- 沥青路面粘弹性力学分析基础研究
- 2008年度中国最佳MBA排行榜
- idea 一直 performing vcs refresh
- TORCH.JIT理解
- 关于视觉SLAM的最先进技术的调查-A survey of state-of-the-art on visual SLAM
- 网页模板设计中5种常见的设计版式类型介绍
热门文章
- 做虚拟化服务器的配资一致嘛,服务器虚拟化技术在校园网管理中的应用探讨.pdf...
- click js自动点击 vue_vue.js2.0点击获取自己的属性和jquery方法
- 王道操作系统考研笔记——2.3.2 进程互斥的软件实现方法
- Flask设置返回json格式数据
- Linux tcpdump命令用法详解
- Linux下获得线程ID syscall(224)
- [react-router] 请你说说react的路由是什么?
- React开发(148):componentWillReceiveProps
- Taro+react开发(20)--控制icon大小
- [html] 怎么去除img之间存在的间隔缝隙?