equals,hashcode,comparable,comparator
来源:互联网 发布:wifi中间人攻击软件 编辑:程序博客网 时间:2024/05/21 10:21
这几个东西包括(==)都和“比较”相关,那么他们的关系是什么?
一.首先,最基础的是equals和==,前者对比内容,后者比较引用地址,很常用。
二. equals和hashCode。
相同点:1.都是Object的方法之一。2.都可以重写。
如果不重写的默认逻辑: 此时equals用的是==,即不重写equals,两个对象用equals比较和 用==比较是一样的效果。hashCode返回的是引用地址(其实这么说并不准确,反正两个内容相同的对象的默认hashCode一般不一样,可以简单理解为引用地址)
不同点: 前者可以通过A.equals(B)直接比较两个对象的内容是否相同,后者主要用于往hash集合(set或map)中存储时比较是否重复
易混点: 为什么说重写equals方法时,往往也要重写hashCode?
这跟 把对象往hash集合中存储时的逻辑 有关,关键一句源码【e.hash == hash && ((k = e.key) == key || key.equals(k))】,代码解释:hash集合判断两个对象一样的逻辑是 两个对象的hashCode一样 && (引用地址一样 || equals结果为true)。因为引用地址肯定不一样,这个逻辑就相当于 【hash一样 && equals一样】,而根据前面所说的 equals和hashCode的默认逻辑,可以看出只重写一个 和不重写 效果一样(这里的效果指的是在插入hash集合 判断重复的效果)
三. comparable和comparator。
相同点:
1. 都是接口,想使用时,都需要类去实现
2. 都是主要用于对象在集合中排序(这里指的是list集合或 数组)
不同点:
1. 类A实现comparable后,A的对象 自己就有了比较大小的功能;类B实现comparator后,类B成为了一个排序的工具comparator,这个工具可以对其他对象进行比较大小
2. 实现comparable后排序的写法: Collections.sort(list); 实现comparator后排序的写法:Collections.sort(list,comparator)
3. 类A实现comparable后,A的对象 自己就有了比较大小的功能,所以此时就可以: A.compareTo(B)进行比较大小。而实现comparator后没有这样的功能
优缺点:
1. comparable可以让对象自己有比较大小的功能而不需要其他工具帮助
2. comparator可以在无法改变原有类的逻辑的情况下 完成排序的功能(无侵入式)
参考连接:
hashCode与equals的区别与联系
Java中的equals和hashCode方法详解
Java中的equals(),==,compareTo()和compare()
Comparable与Comparator的区别
- equals,hashcode,comparable,comparator
- Comparable Comparator equals
- TreeSet+LinkedHashSet+Comparable+Hashcode+Equals
- Java 中的比较 equals() hashcode() comparable
- java 对象相等判断 equals comparable comparator区别
- ==和equals区别&comparable和comparator区别
- Comparable & Comparator
- Comparator Comparable
- Comparable&Comparator
- Comparable& Comparator
- Comparable & Comparator
- Comparator & Comparable
- Comparable & Comparator
- Comparator Comparable
- Comparable & Comparator
- comparable, comparator
- Comparable,Comparator
- 关于集合类,equals,HashCode,Comparable,Iterator总结
- 快速乘取模运算
- SFM算法流程
- Android手势使用ViewFlipper
- HTML第三天学习笔记
- linux kernel 配置与编译
- equals,hashcode,comparable,comparator
- 表单总结
- 03读书笔记之活动的生命周期:
- seven
- [CF549B]Looksery Party
- html第三天学习
- 使用js数组拼接json并post到contoller
- bzoj3732 Network 最小生成树+LCA+树上倍增
- 【HDU 4810】组合数学 Wall painting