本帖最后由 Jim-剣◆﹏ 于 2013-10-26 00:18 编辑
Comparable是让对象具备比较性的时候用到,对象类实现该接口,然后覆写compareTo()
comparator()是创建比较器的时候要用到,比较器类实现该接口,然后覆写compare()
再给你说说
int compareTo()和int compare方法的区别:
int compareTo()是接口comparable里的方法
int compare()是接口comparator里的方法
两者的内部的比较方式都一样:比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数
再给你总结下什么时候用:用于集合存储元素的时候去除重复元素,如果要判断是否重复元素那就得判断是否相等,判断就得有标准和依据
对于List(ArrayList和LinkedList),比较对象是否相等的依据是:对象的equlas(),所以,一般都要覆写对象的equlas()方法实现自定义的比较标准
对于Set判断对象是否相等要分开讨论,hashSet和TreeSet有不同的机制
对于hashSet,判断对象是否相等首先先判断两对象的hashCode()值是否相等
hashCode()值如果相等,则再判断equals()是否相等
hashCode()值如果不等,那么直接判断两对象不是同一对象
所以,一般对于要用hashSet存储对象的,都要覆写对象的hashCode()+equals()
对于TreeSet,判断对象是否相等的方法既不是根据hashCode,也不是equals
有两种方式,这两种方式就用到了接口comparable和接口comparator(终于和你的问题沾点边了,码字辛苦啊)
第一种:让对象具备比较性,要让对象具备比较性,就要让类去实现comparable这个接口,并且覆写里面的compareTo()方法
第二种:当元素不具备比较性时,需要让集合自身具备比较性,建立建立一个比较器,要建立比较器就要让比较器类实现comparator这个接口,并覆写里面的compare()方法
compareTo()和compare()方法里面的代码基本是一样的...
说完了这个顺带说map的比较方式,map也就分hashMap和TreeMap,是不是觉得很眼熟,是的没错,和楼上的set的内两长得很像
好的我直说了,深夜困了
hashMap的比较方式和hashCode一样
TreeMap的比较方式和TreeSet一样
|