2012-04-26 30 views
0
public class EmployeeSortTest { 
    public static void main(final String[] args) { 
     final Employee[] staff = new Employee[3]; 
     staff[0] = new Employee("Harry Hacker", 35000); 
     staff[1] = new Employee("Carl Cracker", 75000); 
     staff[2] = new Employee("Tony Tester", 38000); 
     Arrays.sort(staff); 
     for (final Employee e : staff) { 
      System.out.println("name=" + e.getName() + ",salary=" + e.getSalary()); 
     } 
    } 
} 

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

    public String getName() { 
     return name; 
    } 

    public double getSalary() { 
     return salary; 
    } 

    public void raiseSalary(final double byPercent) { 
     final double raise = salary * byPercent/100; 
     salary += raise; 
    } 

    @Override 
    public int compareTo(final Employee other) { 
     if (salary < other.salary) { 
      return -1; 
     } 

     if (salary > other.salary) { 
      return 1; 
     } 

     return 0; 
    } 

    private final String name; 
    private double salary; 
} 

我与Java初学者,我从先生卡·S·霍斯特曼和他的同事,Java核心,卷我写的书学习:基本面,我发现了一些我不太明白的东西。 “employeesorttest.java”的示例,第243页。我可以忽略使用的“可比性”

我无法得到的是方法compareTo。它如何改变输出?该方法只返回三个数字:0,-1和1.它没有改变任何位置或来自staff的对象。另外,如果代码arrays.sort(staff)确实有效,为什么我们仍然需要使用该界面?

我知道这两个代码之间必定有一些关系。

回答

0

Comparable接口需要定义compareTo方法。

根据Java文档,

int compareTo(T o)

比较此对象与指定对象的顺序。返回负整数,零或正整数,因为此对象小于,等于或大于指定的对象。

如果一个对象实现了Comparable,那么像Arrays.sort(...)这样的函数可以使用它。 Arrays.sort在您的示例中没有查看数组中的对象,如Employee,它只将它看作Comparable对象。它只能看到compareTo方法,但这就是它需要对它们进行排序的一切。

0

这与java例子比较缺少一些会更有意义的东西。我会告诉你的这种方法叫做冒泡排序。

// A bubble sort for Strings. 
class SortString { 
    static String arr[] = { 
    "Now", "is", "the", "time", "for", "all", "good", "men", 
    "to", "come", "to", "the", "aid", "of", "their", "country" 
}; 

public static void main(String args[]) { 
    for(int j = 0; j < arr.length; j++) { 
     for(int i = j + 1; i < arr.length; i++) { 
      if(arr[i].compareTo(arr[j]) < 0) { 
      String t = arr[j]; 
      arr[j] = arr[i]; 
      arr[i] = t; 
     } 
    } 
    System.out.println(arr[j]); 
    } 
} 
}