0

我正在为期末考试而学习,我在期中看一个问题,我错了,老实说,我不知道该怎么做。问题如下:

重写 Person 类,以便如果您有一个 Person 对象的 ArrayList ArrayList,您可以使用 Collections 排序方法对其进行排序。sort 方法应该首先按年龄递减,然后按字母顺序(对于相同年龄的人)对列表进行排序。

问题中提供的相同代码(Person 类)如下。

public class Person {
   public String name;
   public int age;
}

这是一个中期问题,所以我不得不手写代码。我想知道回答这个问题的有效和正确的方法是什么。非常感谢所有答案或输入。谢谢。

4

2 回答 2

2

我想注意@Kevin Bowersox 的回答,他的回答按年龄增长排序,没有考虑到姓名的第二个排序。用这个替换 compareTo 来解决这两个问题

@Override
public int compareTo(Person person)
{
    int ageSort = new Integer(person.age).compareTo(this.age);

    // If the ages aren't the same
    if(ageSort != 0)
    {
        return ageSort;
    }

    // otherwise sort on name alphabetically
    return name.compareTo(person.name);
}
于 2013-04-24T01:40:26.030 回答
1

使Person类实现Comparable接口并为方法提供实现CompareTo

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Person implements Comparable<Person> {
    public String name;
    public int age;

    @Override
    public int compareTo(Person person) {
        return new Integer(this.age).compareTo(person.age);
    }


    public static void main(String[] args) {
        Person person = new Person();
        person.name = "Kevin";
        person.age = 28;
        Person person2 = new Person();
        person2.name="Bob";
        person2.age = 40;
        Person person3 = new Person();
        person3.name="Joe";
        person3.age = 90;

        List<Person> people = new ArrayList<Person>();
        people.add(person2);
        people.add(person3);
        people.add(person);

        Collections.sort((List<Person>)people);

        for(Person p:people){
            System.out.println(p.name);
        }
    }

}
于 2013-04-24T00:43:01.707 回答