我们在学习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