2012-04-26 40 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]); 
    } 
} 
} 
相關問題