HashMap里的equals实现
来源:互联网 发布:ip地址是阿里云 编辑:程序博客网 时间:2024/06/06 20:14
今天遇到一个问题,需要对List<Map>
对象里的Map去重,然后想到是否可以使用Set去重,试了下是可以的,但是仔细想想,发现明明塞进Set的时候是新创建的Map对象,但是Set却认为是重复的塞不进去,想到应该是HashMap的equals里逻辑,遂看源码。
public boolean equals(Object o) {//1.同一对象,对象相等 if (o == this) return true;//2.类型不是Map,对象不相等 if (!(o instanceof Map)) return false; Map<?,?> m = (Map<?,?>) o;//3.size不等,对象不相等 if (m.size() != size()) return false; try { Iterator<Entry<K,V>> i = entrySet().iterator(); while (i.hasNext()) { Entry<K,V> e = i.next(); K key = e.getKey(); V value = e.getValue();//4.如果value为空,对应的对象value不为空或者根本没有这个key,对象不相等 if (value == null) { if (!(m.get(key)==null && m.containsKey(key))) return false; } else { //如果value不为空,对应map相同key的value值是否相等,不等则对象不相等 if (!value.equals(m.get(key))) return false; } } } catch (ClassCastException unused) { return false; } catch (NullPointerException unused) { return false; } return true; }
上面我注释了下,总结下:
1.同一对象,相等;
2.size相等,且对应key的value值完全相同,相等。
1 0
- HashMap里的equals实现
- HashMap与HashCode()、equals()的关系---在HashMap中实现以对象为键(key)
- HashMap与HashCode()、equals()的关系---在HashMap中实现以对象为键(key)
- hashmap的hashcode 与equals
- equals的重写和hashmap
- 【转载】HashMap与HashCode()、equals()的关系---在HashMap中实现以对象为键(key)
- java的HashCode equals == 以及hashMap底层实现深入理解
- HashMap 的equals与hashcode|| treeSet||LinkedList
- 对java里equals的一些理解!
- String 里的==和equals
- java 里的equals()和hashcode()
- java里equals和hashCode的关系
- 说说Java里的equals(上)
- 说说Java里的equals(上)
- 谈谈hashCode&equals&HashMap
- java hashmap equals() hashcode()
- HashMap中的equals()方法
- hashMap hashCode equals
- Unity 3D 正交(Orthographic)摄像机尺寸学习笔记
- Android性能优化
- 【算法】A*算法与启发函数
- UNIX.3rd.Edition.The.Textbook. unix系统基础
- 《Java编程思想》学习记录(二)
- HashMap里的equals实现
- Linux锐捷登录
- POJ 1562 Oil Deposits
- 持久化
- BOSS的AI(自动寻路和自动攻击)
- 最长公共子序列问题
- 参数效验@Valid
- 【BZOJ】1179 [Apio2009]Atm 强连通分量+最短路
- Robotium的测试用例导入测试时出现测试工程有感叹号