使用Array.sort()排序数组而不使用比较器

时间:2015-03-03 05:20:44

标签: java arrays sorting

我必须使用Arrays.sort()通过一个对象的参数对一个自定义对象数组进行排序,但是没有通过比较器。这是一项家庭作业,我的教授希望我们在没有比较器的情况下这样做。

更具体地说,我有一个对象类型为“女性”的数组[],女性由参数'name'和'age'组成。我必须使用Arrays.sort(femaleList)按年龄对数组进行排序,但我再也不能使用比较器。

我正在尝试使用.getAge()或类似的东西,但它不起作用。我假设有一些相对简单的解决方案,我忽略了,任何帮助都会非常感激。

3 个答案:

答案 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