天天看点

对象的比较

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           
上一篇: 集合转数组