我正在编写一段代码,它编译得很好,但有点草率,可以优化。有没有更好或更简单的方法来做到这一点。我是否以正确的方式使用了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;
}
}
最佳答案
block 引用>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/