
关于java接口的问题
正常讲java中接口的方法要我们自己去实现,可是为什么comparable接口,我们在自己创建的类中比如创建一个学生类,他没有实现comparable接口的compare...
正常讲java中接口的方法要我们自己去实现,可是为什么comparable接口,我们在自己创建的类中比如创建一个学生类,他没有实现comparable接口的compareto方法,我们自己去实现,以为的想法是,如果我们自己去实现接口中的方法,应该是整个方法我们都要自己去定义,比如我们比较学生类中的id属性,我们只需要实现public int compareTo(Student o)
return this.id-o.sid;只需要对两个对象的id进行减,判断它是正负,还是零,然后他就自动排序了,这就是我不理解的地方,既然接口是自己去实现方法,那么为什么我们不用自己去做后面这些,他就可以自己排序呢,那这些后续的方法是怎么实现的,初学者搞不明白。。。 展开
return this.id-o.sid;只需要对两个对象的id进行减,判断它是正负,还是零,然后他就自动排序了,这就是我不理解的地方,既然接口是自己去实现方法,那么为什么我们不用自己去做后面这些,他就可以自己排序呢,那这些后续的方法是怎么实现的,初学者搞不明白。。。 展开
展开全部
Java 提供了只包含一个 compareTo()方法的 Comparable 接口。这个方法可以个
给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,
大于已经存在的对象。
Java 提供了包含 compare()和 equals()两个方法的 Comparator 接口。
compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是
小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定
输入参数是否和 comparator 相等。只有当输入参数也是一个 comparator 并且
输入参数和当前 comparator 的排序结果是相同的时候,这个方法才返回 true。
给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,
大于已经存在的对象。
Java 提供了包含 compare()和 equals()两个方法的 Comparator 接口。
compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是
小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定
输入参数是否和 comparator 相等。只有当输入参数也是一个 comparator 并且
输入参数和当前 comparator 的排序结果是相同的时候,这个方法才返回 true。
展开全部
你是不理解为什么重写了compareTo就能排序是吧?
compareTo只是提供了一个返回值,真正的排序代码是Collections类的sort方法中写好的,这个方法会根据你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会根据数组的长度选择不同的排序方法,并不一定是冒泡排序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
您好,这个是典型的接口回调问题。一般先有方法的申明,再有方法的实现。例如程序员 A 和 B 之间需要协作,A 告诉 B 这个任务中间的某个环节需要 B 来完成,并且完成后告诉 A,这时候程序员 A 就需要告诉 B 一个联系方式,使 B 完成时来通知自己,这个场景就可以使用回调。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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方法。
至于你说的你自己做排序是可以的。比如用二分法、冒泡等等。但是。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |