0

クラスを順番にソートする効率的な方法を見つけるのに問題があります。私の次のコードは、ソートする必要がある順序を完了しますが、別の方法があると思います (1 つはわかりません)。

クラスをソートする効率的な方法は何ですか?

public int compare(Object one, Object two)    
{  
          //S = Salaried, W = Weekly, D = Daily

          //SS == 0 -> SW == -1 -> SD == -1
          //WS == 1 -> WW == 0 -> WD == -1 
          //DS == 1 -> DW == 1 -> DD == 0

          Employee a = (Employee)one;
          Employee b = (Employee)two;

          SalariedEmployee s = new SalariedEmployee(0.0); 
          WeeklyEmployee w = new WeeklyEmployee (0.0);
          DailyEmployee d = new DailyEmployee();


          if(one.getClass() == s.getClass() && two.getClass() == s.getClass())
              return Double.compare(b.grossPay(), a.grossPay());

          if(one.getClass() == s.getClass() && two.getClass() == w.getClass())
              return -1;

          if(one.getClass() == s.getClass() && two.getClass() == d.getClass())
              return -1;

          if(one.getClass() == w.getClass() && two.getClass() == s.getClass())
              return 1;

          if(one.getClass() == w.getClass() && two.getClass() == w.getClass())
              return Double.compare(b.grossPay(), a.grossPay());

          if(one.getClass() == w.getClass() && two.getClass() == d.getClass())
              return -1;

          if(one.getClass() == d.getClass() && two.getClass() == s.getClass())
              return 1;

          if(one.getClass() == d.getClass() && two.getClass() == w.getClass())
              return 1;

          if(one.getClass() == d.getClass() && two.getClass() == d.getClass())
              return Double.compare(b.grossPay(), a.grossPay());

          return 0;

      }
4

4 に答える 4

3

クラスに Comparable<> インターフェイスを実装compareTo()し、Employee クラスにメソッドをオーバーライドします。メソッドは Object クラスを渡された値として受け取ります。例えば、

public class Employee implements Comparable<Employee> {
    //omitted

    public int compareTo(Employee other) {
        return grossPay.compareTo(other.grossPay);
    }
}

詳細については、次のリンクを参照してください http://download.oracle.com/javase/tutorial/collections/interfaces/order.html

于 2013-06-24T00:36:54.933 に答える
0

最初に、同等のインターフェースを実装する必要があります。これにより、クラスの比較に適していると思われる特定の値に基づいてクラスをソートするために使用できる compareTo メソッドを定義できます。

compareTo メソッドの定義は、自身を比較する事前定義された方法を持たないオブジェクトに役立ちます。

于 2013-06-24T07:57:14.700 に答える