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;
}

Cay S. Horstmann 氏と彼の同僚であるCore Java, Volume I: Fundamentalsによって書かれた本から学ぶように、私は Java の初心者です。245 ページの「employeesorttest.java」の例。

私が得ることができないのは方法compareToです。出力はどのように変化しますか?このメソッドは、0、-1、および 1 の 3 つの数値のみを返します。位置やオブジェクトは から変更されませんでしたstaff。また、コードarrays.sort(staff)が機能する場合、なぜインターフェイスを使用する必要があるのでしょうか?

両方のコードの間に何らかの関係があるに違いないことはわかっています。

4

3 に答える 3

1

Comparable インターフェイスは、要素を別の要素に対して相対的にソートする必要がある場所を他のコードに通知するだけです。その情報で実際に何かを行うのは、呼び出し元のコード次第です。

Comparable の用途には次のようなものがあります。

詳細については、 Java チュートリアルのオブジェクトの順序に関するセクションを参照してください。

于 2012-04-26T12:53:40.257 に答える
0

インターフェイスにはメソッドのComparable定義が必要です。compareTo

Javaのドキュメントによると、

int compareTo(T o)

このオブジェクトを指定されたオブジェクトと比較して順序を確認します。このオブジェクトは指定されたオブジェクトよりも小さいか、等しいか、または大きいため、負の整数、ゼロ、または正の整数を返します。

オブジェクトがを実装する場合、のComparableような関数はArrays.sort(...)それを使用できます。Arrays.sort例のように配列内のオブジェクトを見るのではなく、オブジェクトEmployeeとして見るだけComparableです。メソッドのみがcompareTo表示されますが、ソートする必要があるのはそれだけです。

于 2012-04-26T12:58:24.473 に答える
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 に答える