首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

这个compareTo接口程序没有看懂,请帮忙

2013-11-27 
这个compareTo接口程序没看懂,请帮忙。下面是书上的一个程序.import java.util.*public class Test{public

这个compareTo接口程序没看懂,请帮忙。
下面是书上的一个程序.

import java.util.*;

public class Test
{
public static void main(String[] args)
{
Employee[] staff = new Employee[3];
staff[0] = new Employee("abc", 5000);
staff[1] = new Employee("efg", 2000);
staff[2] = new Employee("opq", 3500);

Arrays.sort(staff);

for(Employee e: staff)
{
System.out.println("name = " + e.getName() + ", and his salary is "+ e.getSalary());
}
}
}

class Employee implements Comparable<Employee>
{
public Employee(String n, double s)
{
name = n;
salary = s;
}

public String getName()
{
return name;
}

public double getSalary()
{
return salary;
}

public int compareTo(Employee other)
{
if(salary < other.salary)
{
return -1;
}
if(salary > other.salary)
{
return 1;
}
return 0;
}
private String name;
private double salary;
}


我对这一步
public int compareTo(Employee other)
{
if(salary < other.salary)
{
return -1;
}
if(salary > other.salary)
{
return 1;
}
return 0;
}


中的salary的比较是说前一个雇员的薪水与后一个雇员的薪水进行比较,但是我不明白的是,从哪里可以看出是前一个雇员与后一个雇员的薪水进行比较?尤其是前一个salary没有任何修饰词。C语言中好歹用salary[i-1]与salary[i]来看出前后。
[解决办法]
你本身这个类调用这个方法需要new对象吧,前一个salary就是他的
[解决办法]
主动调用该方法的实例化Employee对象就是“前一个”
传入的实例化Employee对象参数就是“后一个”
[解决办法]
public int compareTo(Employee other)
{
if(salary < other.salary)
{
return -1;
}
if(salary > other.salary)
{
return 1;
}
return 0;
}

这边的salary其实是隐藏了一个关键字的就是this,其实就是this.salary,this指的是当前调用这个方法的对象,如果要明白如果调用compareTo方法的话,你看下Array.sort的源码吧
[解决办法]


public int compareTo(Employee other)
        {
                if(this.salary < other.salary)   
                {
                        return -1;   
                }
                if(this.salary > other.salary)
                {
                        return 1;   
                }
                return 0;
        }


[解决办法]
public int compareTo(Employee other)
        {
                if(this.salary < other.salary)   
                {
                        return -1;   
                }
                if(this.salary > other.salary)
                {
                        return 1;   
                }


                return 0;
        }
[解决办法]
楼主想要明白compareTo方法,需要了解的知识有这些:

1.Comparable接口
2.this关键字
3.compareTo()方法的参数和返回值意义

如果搞清楚这三点,你肯定就知道原因了。然后你可以再了解一下Comparator这个类,用它可以实现不同的排序方式。当然,是通过内部类实现的。

热点排行