2016-11-07 8 views
0

私は銀行に似たようなお金の価値を保存するオブジェクトのリストを作成しました。私はそれらのために作られた比較メソッドを使って値の一つが変更されるたびにオブジェクトをソートするために更新するループを持っています。とにかく、ループ内の各オブジェクトをチェックせずにこれらをソートすることができますか(発生するループの量を減らすか、完全に取り除く)。単にループデータの配列を並べ替えるのに最も効率的な方法は何ですか(java compareToが高いものから低いものへ)

を通じて取得したばかりされているオブジェクトに保存されている彼らの整数が整数ではない:

は、私は比較的仕分けで新しく、効率よそんなにみんながそう私に簡単に移動してください:)

編集をありがとう

+0

更新の数が、ソートされたリストを取得する必要がある回数を超えている場合は、リストを更新するときには保存せず、取得するときにのみソートしてください。それはあなたが持っているものよりも優れた解決策を探し出す前に、あなたがそれを測定して、それが遅すぎるということを発見しました、そして、この種は犯人でしたか?そうでなければ、あなたはただ事前に最適化しており、それはすべての悪の根源です。 –

+0

いくつかの注意点があります。ソートされたセットを使用してください。https://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html値を変更するときは、セットから削除し、変更して、再度追加します。注意点:上記のJB Nizetの点を考慮し、ソート順と 'equals'の間の関係についてjavadocを読んでください。 – Taylor

+0

最も簡単な方法で、最も効率的な方法が何であるか、またはどのようにソートするかを尋ねていますか?後者の場合、Google検索では数多くの例が返されます。しかし、それは 'list.sort(Comparator.comparingInt(MyObject :: getMoneyValue))'に沸いてしまいます。 –

答えて

0

私はJavaには順序付けのための効率的なメソッドがあると思います。順序付けメソッドを作成する必要はありません。

compareToメソッドがある場合は、Javaコレクション(たとえばリスト)を実行して、それに付属のメソッドを使用できます。

例えば:

import java.util.List; 
import java.util.ArrayList; 

public class Employee implements Comparable<Employee>{ 

    private int id; 
    private String name; 
    private String surname; 
    private float salary; 

    public Employee(int id, String name, String surname, float salary) { 
     super(); 
     this.id = id; 
     this.name = name; 
     this.surname = surname; 
     this.salary = salary; 
    } 

    // Compare 2 employees by salary 
    @Override 
    public int compareTo(Employee employee) {  
     // Compared by salary 
     if (this.salary < employee.salary) {  
      return -1; 
     } 
     else if(this.salary > employee.salary){ 
      return 1; 
     } 

     return 0; 
    } 

    @Override 
    public String toString() { 
     return "Employee [name=" + name + ", salary=" + salary + "]"; 
    } 

    public static void main(String args[]){ 
     Employee employee1 = new Employee(1, "One", "One Surname", 1800); 
     Employee employee2 = new Employee(2, "Two", "Two Surname", 200); 
     Employee employee3 = new Employee(3, "Three", "Three Surname", 1500); 
     Employee employee4 = new Employee(4, "Four", "Four Surname", 800); 

     List<Employee> list = new ArrayList<>(); 
     list.add(employee1); 
     list.add(employee2); 
     list.add(employee3); 
     list.add(employee4); 

     System.out.println(list); // Unordered list 

     list.sort(null); 

     System.out.println(list); // Ordered list by salary 

    } 
} 

あなたはこの出力を持つことになります。

[社員[名=ワン、給与= 1800.0]、従業員[名=二、給与= 200.0]、従業員の[名前従業員[名前= 4、給与= 800.0]、従業員[名前= 4、給与= 800.0]、従業員[名前= 4、給与= 800.0] 3人、給与= 1500.0]、従業員[名前= 1、給与= 1800.0]

+0

Daniさんありがとう! –

関連する問題