| 本帖最后由 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一样
 
 |