什么是排序数据的最有效方法(java compareTo从高到低)

时间:2016-11-07 19:13:00

标签: java sorting

我有一个我创建的对象列表,用于存储货币值,类似于银行的帐户。每次使用我为它们制作的比较To方法更改其中一个值时,我有一个循环更新以对对象进行排序。无论如何我可以在不检查循环中的每个对象的情况下对这些进行排序(减少发生的循环量或完全消除它)。

非常感谢你们,我在排序和效率方面相对较新,所以请放轻松我:)

编辑:不是简单地整数存储在通过循环检索的对象中的整数

1 个答案:

答案 0 :(得分: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],员工[姓名=三,薪水= 1500.0],员工[姓名=四,薪水= 800.0]]

[员工[姓名= 2,薪水= 200.0],员工[姓名= 4,薪水= 800.0],员工[姓名= 3,薪水= 1500.0],员工[姓名= 1,薪水= 1800.0]]