1)详细说明对象的比较方式有哪些?
0.1 == 比较对象的引用地址是否相等
0.2 equals 对象 默认是引用地址的比较,详情可见Object的equals,
String对象中equals方法是对object方法的重写!一般情况下,将equals() 和hashcode()
协同起来,进行对象的比较!
注意:0.1equals方法相等,hashcode一定相等,hashode相等,equals不一定相等!会存在hash冲突的情况
0.2 map的key存储自定义对象或者set存储自定义对象时,一定要重写,hashcode和equals
0.3 内部比较:(自营性质 ) Comparable 比较方法是 compareTO
0.4 外部比较: (平台性质---可看成工具类) Comparator 比较方法是 compare
2) 用一个生活中的对象来生动地说明Comparator和Comparable的区别。
Comparable 是 java.lang包 , Comparator是java.util包 ?为什么?
Comparable 对象自身之间进行比较,接口的实现是在类的内部, 如:Integer 的排序 所以放在lang包下
Comparator 是第三方的比较,Comparator接口的实现是在类的外部 如何:集合的排序 Collections.sort()
如果比较的方法只要用在一个类中,用该类实现Comparable接口就可以。
如果比较的方法在很多类中需要用到,就自己写个类实现Comparator接口,这样当要比较的时候把实现了Comparator接口的类传过去就可以,省得重复造轮子。这也是为什么Comparator会在java.util包下的原因。
Comparable 是自身具有某种能力,将自身的属性与他人进行比较, Comparator是在第三方(平台、上帝)视角上,对比两个人的某种或者某些属性
生活中的例子: 小张同学想知道自己比其他的同学的成绩 高低?小张同学站在自身的视角,此时就用Comparable
老师想知道全部同学的成绩或者身高的高低?老师站在第三方的视角,此时就用Comparator