【问题标题】:what is the most efficient way to sort arrays of data (java compareTo high to low) [duplicate]对数据数组进行排序的最有效方法是什么(java compareTo high to low)[重复]
【发布时间】:2017-03-21 05:55:34
【问题描述】:

我有一个我创建的存储货币价值的对象列表,有点像银行的账户。我有一个循环,每次使用我为它们制作的 compare To 方法更改其中一个值时,它都会更新以对对象进行排序。无论如何我可以在不检查循环中的每个对象的情况下对它们进行排序(减少发生的循环数量或完全摆脱它)。

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

编辑:不只是整数,它们的整数存储在通过循环检索的对象中

【问题讨论】:

  • 如果更新次数大于需要获取排序列表的次数,只要更新列表时不要存储,获取时只排序。也就是说,在寻找比你现有的更好的解决方案之前,你有没有测量过它,发现它太慢了,而这就是罪魁祸首?因为否则,您只是在进行预优化,这是万恶之源。
  • 有一些注意事项的建议:使用排序集 docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html 。更改值时,从集合中移除、更改并重新添加。注意事项:考虑上面 JB Nizet 的观点,并阅读有关排序顺序和equals 之间关系的 javadoc。
  • 您是在问最有效的方法是什么,还是在问如何以最简单、自然的方式进行排序。如果是后者,谷歌搜索将返回大量示例。但归结为list.sort(Comparator.comparingInt(MyObject::getMoneyValue))
  • 我要求最有效的方式 JB。感谢大家的反馈!这一切都非常有帮助:D

标签: java sorting


【解决方案1】:

我认为 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]]

[员工[姓名=二,工资=200.0],员工[姓名=四,工资=800.0],员工[姓名=三,工资=1500.0],员工[姓名=一,工资=1800.0]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 2019-08-17
    • 2014-04-29
    • 2020-12-30
    • 2020-05-06
    • 2016-10-19
    • 1970-01-01
    • 2010-11-05
    相关资源
    最近更新 更多