java - 更好的优化

标签 java optimization arraylist

我正在编写一段代码,它编译得很好,但有点草率,可以优化。有没有更好或更简单的方法来做到这一点。我是否以正确的方式使用了compareTo()方法?我正在尝试使用不同的方法来使代码比下面的示例更干净、更快。

import java.util.ArrayList;

public class Sort {

    public ArrayList<Name> sort(ArrayList<Name> names) {

        ArrayList<Name> results;
        results = new ArrayList<Name>(); 

        do {
            Name firstName = new Name("zzz", "zzz");
            for (int i = 0; i < names.size(); i++)
                if (names.get(i).getFirstName()
                        .compareTo(firstName.getFirstName()) < 0
                        || names.get(i).getFirstName() == firstName
                                .getFirstName() && names.get(i).getSurName()
                                .compareTo(firstName.getSurName()) < 0)
                firstName = new Name(names.get(i).getFirstName(), 
                                names.get(i).getSurName());

            results.add(firstName);
            names.remove(firstName);
        } while (names.size() > 0);

        return results;
    }

}


class Name {
    private String firstName; 
    private String surName;

    public Name() {
    }

    public Name(String firstName, String surName) {
        this.firstName = firstName;
        this.surName = surName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getSurName() {
        return surName;
    }

    public void setSurName(String surName) {
        this.surName = surName;
    }

    public String toString() {
        return firstName + " " + surName;
    }

    public boolean equals(Object other) {
        return firstName == ((Name) other).firstName
                && surName == ((Name) other).surName;
    }



}

最佳答案

Is there a better or easier way to do this. Also am I using the compareTo() method in the correct way?

是的,有几个问题:

  • 比较字符串应该使用 equals 方法而不是 ==喜欢 firstName == ((Name) other).firstName
  • 从表面上看,您正在尝试对名称列表进行排序。你可能需要 O(N^2) 时间来完成它。使用 JDK 的排序,您可以在 O(NlogN) 时间内完成相同的操作,从而使其比当前的情况更糟糕。

因此,请定义您自己的比较器并使用它,如下所示:

Collections.sort(names, new MyNamesComparator());

关于java - 更好的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30286867/

相关文章:

matlab - MATLAB 中的循环缓冲区,**不**复制旧数据

java - 抽象异常类中的串行版本 uid

java - mybatis在插入数据库时​​是否会更改时区?

java - JSF 不工作 : Select SelectOneMenu And Dynamically Update Other SelectOneMenu With Ajax

mysql - mysql 中什么更快,数字列等于或更大?

android - 按字母顺序排序 Arraylist

java - 从 Android 网站解析

Java:如何优化读取/更新/写入许多小文件的内存占用?

java - 无法从 int[] 转换为 int?

java - 在 MapReduce 中,如何将数组列表作为值从映射器发送到 reducer