黑马程序员技术交流社区
标题: 关于compare和compareTo [打印本页]
作者: 闲人 时间: 2014-4-1 20:26
标题: 关于compare和compareTo
本帖最后由 闲人 于 2014-4-1 21:14 编辑
public int compare(Object o1,Object o2)
{
Student s1 = (Student)o1;
Student s2 = (Student)o2;
int num = s1.getName().compareTo(s2.getName());
if(num==0)
{
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
}
return num;
}
------------------------------
这是今天看到的一段代码,里面的compare和compareTo方法,都是用来比较的,
但是搞不清有什么区别,分别在什么情况下使用?
求解
作者: Up↑Lee↗ 时间: 2014-4-1 20:33
treeSet集合:
保证元素唯一性的依据:
用compareTo方法return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。定义了比较器,定义一个类,实现Comparator接口,覆盖compare方法。将比较器对象作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。
作者: 759345779 时间: 2014-4-1 20:59
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
这种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
可以再看看毕老师java基础视频第15天04关于两种的比较方法,相信会受益匪浅。
作者: 闲人 时间: 2014-4-1 21:04
可否理解为compareTo在需要自然排序时,采用
而compare则是自定义排序内容时采用,
作者: Up↑Lee↗ 时间: 2014-4-1 21:13
对对 就是这个意思
作者: 郭黎明 时间: 2014-4-1 21:13
compareTo()是实现了Comparable接口后要实现的方法,compare()是实现Comparator接口要实现的方法。我们自定义的对象往集合里存的时候,会对它们进行比较来判断是不是同一个元素,这个时候使对象具有比较性要实现Comparable接口重写它的compareTo()方法,这是一种办法,还有就是让容器自身具有比较性,这个时候就要新建一个类实现Comparator接口作为比较器,然后new一个比较器传进集合里面,使容器具有比较性。当这两种方法同时存在时,以带比较器的 为主。
在list集合里比较自定义对象只需要重写eaulas,在Hashset,Hashmap里比较时要重写equals和hashcode方法,Treeset.Treemap会实现Comparable或者Comparator接口
作者: 闲人 时间: 2014-4-1 21:14
感谢各位!
作者: yanzhendong 时间: 2014-4-1 21:17
compareTo()是对象实现可比性时重写的comparable()接口中的一个函数,compare()是定义比较器时重写的一个函数,compareTo封装在被比较对象的内部,而compare()封装在容器中,
作者: syw02014 时间: 2014-4-2 15:15
compareTo()方法是Comparable接口唯一需要实现的方法。它的返回值不同于equals(),返回的是int值-1、0和1,而不是true和false。如果你的自定义类有自然顺序,那么最好也implements这个Comparable接口并实现compartTo()方法。事实上,Java类库中许多类都实现了这个接口,比如:String、Integer、Date、Time等等。
最后compare()是Comparator接口的一个方法。最为常见的用法是自定义一个类实现Comparator接口,然后在调用Collection.sort()时作为参数传递。这样可以在compare()方法的实现中指定集合元素的排序规则。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |