按一定数量排序列表?

时间:2014-02-24 19:19:32

标签: java

我需要对包含每个人年龄的数组列表进行排序,但是我必须打印出超过65岁的人员列表。我知道如何在SQL中执行此操作,而不是Java。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

首先确保您已完全说明问题,然后考虑您将首先使用的算法(这不是语言特定的);然后实现算法。

如果问题仅仅是列出年龄超过65岁(不是65岁或更大?)的阵列中的所有人,那么您只需要遍历阵列,并且对于每一行,检查年龄是否满足标准。如果是,请打印出来。

如果您需要对列表进行排序,请先执行此操作。 (如果列表很长,则使用冒泡排序或更有效的排序);然后逐步查看清单,直到找到截止年龄并打印出所有剩余时间。

答案 1 :(得分:0)

我将假设您(a)想要按Person值{em}分配age对象列表,然后(b)仅打印出来那些年龄大于65岁的Person

在java中,进行排序的一种方法是使用Comparator。 Javadoc是here。如果您只打算使用一次,则可以将其实现为内联类;如果计划在多个位置使用它,则可以将其实现为单独的类。

ArrayList<Person> persons = new ArrayList<Person>();

Comparator<Person> example = new Comparator<Person>() {

    @Override
    public int compare(Person o1, Person o2) {
        return o1.getAge() - o2.getAge();
    }
};

Collections.sort(persons, example);

此实现将按年龄排序。您可以通过切换o1o2来切换升序和降序。

另一种可能更简单的方法是在Person类中实现Comparable。 为了使您的Person类具有可比性,请修改其声明:

public class Person implements Comparable<Person> {

并添加compareTo()方法:

@Override
public int compareTo(Person o) {
    return this.getAge() - o.getAge();
}

但是,这只允许您按一个属性对类进行排序。使用Comparator,您可以定义多个属性,以便根据不同的属性进行排序,例如名字,姓氏和年龄。

要仅打印年龄大于65岁的Person,只需循环查看列表内容,并if条件检查每个Person的年龄,并仅在年龄时打印&GT; 65。