关于java接口的问题

正常讲java中接口的方法要我们自己去实现,可是为什么comparable接口,我们在自己创建的类中比如创建一个学生类,他没有实现comparable接口的compare... 正常讲java中接口的方法要我们自己去实现,可是为什么comparable接口,我们在自己创建的类中比如创建一个学生类,他没有实现comparable接口的compareto方法,我们自己去实现,以为的想法是,如果我们自己去实现接口中的方法,应该是整个方法我们都要自己去定义,比如我们比较学生类中的id属性,我们只需要实现public int compareTo(Student o)
return this.id-o.sid;只需要对两个对象的id进行减,判断它是正负,还是零,然后他就自动排序了,这就是我不理解的地方,既然接口是自己去实现方法,那么为什么我们不用自己去做后面这些,他就可以自己排序呢,那这些后续的方法是怎么实现的,初学者搞不明白。。。
展开
 我来答
百度网友1b5c3c9
2019-01-04 · 超过16用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:9.7万
展开全部
Java 提供了只包含一个 compareTo()方法的 Comparable 接口。这个方法可以个
给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,
大于已经存在的对象。
Java 提供了包含 compare()和 equals()两个方法的 Comparator 接口。
compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是
小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定
输入参数是否和 comparator 相等。只有当输入参数也是一个 comparator 并且
输入参数和当前 comparator 的排序结果是相同的时候,这个方法才返回 true。
302652034_bai
2018-10-10 · TA获得超过4146个赞
知道大有可为答主
回答量:2206
采纳率:66%
帮助的人:1586万
展开全部
你是不理解为什么重写了compareTo就能排序是吧?
compareTo只是提供了一个返回值,真正的排序代码是Collections类的sort方法中写好的,这个方法会根据你compareTo提供的结果进行排序。
追问
比如说我用一个treeset集合去添加对象,因为自定义类的比较由我们来实现,而treeset实现comparable接口,我们只把比较值传给集合,然后由于它实现了comparable接口所以可以来排序是吗。
追答
comparable接口是你自定义类去实现的,排序是sort方法完成的,这你得分开不能混在一起
sort会判断数组中的对象是否有实现comparable接口,然后在比较的过程中调用对象的compareTo获得比较结果,根据结果再交换或者保留对象的位置。
追问里的问题:每个数都会进行多次比较,举个例子:
231三个数
取第一个数(2)和后面(两个)比较:
2和3比较 compareTo返回2-3 0 所以交换位置 顺序 132
去第二个数(3)和后面(一个)比较:
3和2比较 compareTo返回 3-2 >0 所以交换位置 顺序 123
以上步奏就根据compareTo的结果完成了排序,这只是个例子,实际上sort会根据数组的长度选择不同的排序方法,并不一定是冒泡排序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c294d432
2018-12-19
知道答主
回答量:3
采纳率:0%
帮助的人:2390
展开全部
您好,这个是典型的接口回调问题。一般先有方法的申明,再有方法的实现。例如程序员 A 和 B 之间需要协作,A 告诉 B 这个任务中间的某个环节需要 B 来完成,并且完成后告诉 A,这时候程序员 A 就需要告诉 B 一个联系方式,使 B 完成时来通知自己,这个场景就可以使用回调。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
知道小小白
2018-10-10 · TA获得超过543个赞
知道小有建树答主
回答量:909
采纳率:70%
帮助的人:317万
展开全部

List的排序,可以使用Collections工具中的2个方法,

public static <T extends Comparable<? super T>> void sort(List<T> list) {
    list.sort(null);
}

public static <T> void sort(List<T> list, Comparator<? super T> c) {
    list.sort(c);
}

你问题中实现Comparable接口,用的是第一个方法。compareTo方法主要是定义排序规则。

Collections.sort方法中主要根据排序规则来排序。至于具体的处理逻辑你可以看下源码。ArrayList的sort方法。Collections.sort最终都会调用List实现类中的sort方法。

至于你说的你自己做排序是可以的。比如用二分法、冒泡等等。但是。。。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吾声非吾声
2018-10-10 · 超过128用户采纳过TA的回答
知道小有建树答主
回答量:221
采纳率:82%
帮助的人:81.2万
展开全部

重写compareTo,是为了让你自己实现 对 对象排序。记住是 你的逻辑排序。为什么 我要是 this.id -o.id呢 ,为什么不能反过来呢,对吧。如果需要进行对象排序,就要写自己的逻辑来排序

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式