java compareto 返回值_Java comparable接口及compareTo返回值所决定的升序降序问题

本文探讨了Java中对象数组使用Arrays.sort排序时为何必须实现Comparable接口,并详细解析了compareTo方法的返回值如何决定升序和降序。通过示例代码和源码分析,解释了compareTo方法的实现及不同返回值对应的不同排序效果。文章最后提出了当按年龄排序时,遇到年龄相同如何按名字降序排序的问题,鼓励读者自行思考解决方案。
摘要由CSDN通过智能技术生成

我们在学习java基础的时候知道,基本数据类型数组可以直接调动Arrays类的静态sort方法,然后输出。

例如: int iArr[] = {1,2,4,6};  Arrays.sort(iArr); 然后利用for循环输出..

但是如果我们是对象数组的话,则对象所在的类必须实现comparable接口,覆写它的compareTo方法,并且要有不同的返回值,代表升序和降序。

但是会有一个疑问:为什么对象数组调用Arrays.sort 必须要实现comparable接口呢?而且compareTo的返回值到底代表什么意义呢,它又是如何决定数组的升序和降序的呢?

带着这样的疑问,我自己写了一个很简单的例子,然后进行调试,跟进源码,终于发现的一点端倪,然后把我自己理解分享给大家

关于如何进入源码,以及查看源码中与变量有关的信息我的有一篇博客讲到 补充 ,有时间可以去看下。。

接下来上代码://Test类 package TEST;

public class Test implements Comparable

{

int age = 0;

String Name;

public Test(int age, String name)

{

super();

this.age = age;

Name = name;

}

public int compareTo(Test o)

{

if (this.age > o.age)

return 1;

else return -1;

}

public String toString()

{

return age+Name;

}

}

//TestDemo类 package TEST;

import java.util.Arrays;

public class TestDemo

{

public static void main(String args[])

{

Test t[] = {

new Test(6, "paul"),

new Test(5, "ss"),

new Test(2, "kk"),

new Test(3, "tt"),

new Test(1, "ii")

};

Arrays.sort(t);

for (int i=0; i

{

System.out.println(t[i]);

}

}

}

接下来我们加入断点进行调试

首先我们进入方法1: Arrays.class中的sort()方法

public static void sort(Object[] a)

{

if (LegacyMergeSort.use

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值