我必须使用Arrays.sort()通过一个对象的参数对一个自定义对象数组进行排序,但是没有通过比较器。这是一项家庭作业,我的教授希望我们在没有比较器的情况下这样做。
更具体地说,我有一个对象类型为“女性”的数组[],女性由参数'name'和'age'组成。我必须使用Arrays.sort(femaleList)
按年龄对数组进行排序,但我再也不能使用比较器。
我正在尝试使用.getAge()或类似的东西,但它不起作用。我假设有一些相对简单的解决方案,我忽略了,任何帮助都会非常感激。
答案 0 :(得分:2)
除非我遗漏了某些内容,否则请执行Comparable<Female>
class Female implements Comparable<Female> {
// ...
public int compareTo(Female that) {
if (this.age < that.age) {
return -1;
} else if (this.age > that.age) {
return 1;
}
return 0;
}
}
如果你做了最后一行
return this.name.compareTo(that.name);
如果年龄相同,它将按name
排序。
答案 1 :(得分:2)
可以这么简单:
class Female implements Comparable<Female> {
// ...
public int compareTo(Female that) {
return this.age - that.age;
}
}
因为您必须返回的是:
负整数,零或正整数,因为此对象较少 比,等于或大于指定的对象。
http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html
请注意,此实施会带来风险。这假设减去年龄不会导致溢出,如果它们的符号不同(基本上是这个加法)并且它们的大小的总和大于年龄类型可以容纳的话可能发生溢出。
另一个要注意的重点是不要使用减法进行比较 积分值,因为减法的结果可能会溢出 Java中的int操作是模2 ^ 32。使用Integer.compareTo() 或逻辑运算符进行比较。你有一个场景 可以使用减法来减少混乱并提高性能。和我们一样 知道比较不关心幅度,只关心结果是否正确 积极的或消极的。在比较两个可以使用的整数字段时 如果您绝对确定两个操作数都是正数,则减法 整数或更精确[它们的差异]必须小于 Integer.MAX_VALUE的。在这种情况下,将没有溢出和你的 compareTo将简洁明快。
http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html
答案 2 :(得分:1)
您需要Female
实施Comparable
。