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 的初学者,当我从 Cay S. Horstmann 先生和他的同事Core Java, Volume I: Fundamentals所写的书中学习时,我发现了一些我不太明白的东西。“employeesorttest.java”示例(第 245 页)。

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

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

4

3 回答 3

1

Comparable 接口只告诉其他代码元素应该相对于另一个元素排序的位置。由调用代码实际使用该信息执行某些操作。

Comparable 的用途包括:

有关更多信息,请参阅Java 教程中的对象排序部分。

于 2012-04-26T12:53:40.257 回答
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]); 
   } 
 } 
}
于 2012-04-26T13:13:20.303 回答
0

Comparable接口需要方法的定义compareTo

根据 Java 文档,

int compareTo(T o)

将此对象与指定对象进行比较以进行排序。返回负整数、零或正整数,因为此对象小于、等于或大于指定对象。

如果一个对象实现了Comparable,那么类似的函数Arrays.sort(...)可以使用它。Arrays.sort不像Employee您的示例中那样查看 Array 中的对象,它仅将其视为一个Comparable对象。它只看到compareTo方法,但这就是对它们进行排序所需的全部。

于 2012-04-26T12:58:24.473 回答