📅  最后修改于: 2023-12-03 15:24:32.578000             🧑  作者: Mango
在Java中,可以使用 Collections.sort()
方法来对 ArrayList 进行排序。但是在排序时,需要传入一个比较器来指定排序的规则。下面我们将介绍如何通过属性对对象的 ArrayList 进行排序。
我们假设有一个 Person
类,该类有两个属性:name
和 age
,并且我们已经创建了一个 ArrayList<Person>
对象:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
ArrayList<Person> persons = new ArrayList<>();
persons.add(new Person("Tom", 18));
persons.add(new Person("Jerry", 20));
persons.add(new Person("Scott", 16));
要按照 Person
对象的 name
属性排序,我们需要创建一个比较器来实现排序规则。在比较器中,我们需要调用 Person
对象的 getName()
方法,获取其 name
属性,并将其与其他 Person
对象的 name
属性进行比较。比较器的示例代码如下:
Comparator<Person> nameComparator = new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
}
};
在上述代码中,我们实现了 Comparator<Person>
接口,并重写了其中的 compare()
方法。这个方法定义了两个参数 o1
和 o2
,分别代表待比较的两个 Person
对象,我们在方法中使用 getName()
方法获取它们的 name
属性,并使用 compareTo()
方法进行比较。最终的比较结果将决定 o1
和 o2
的排序顺序。
接下来,我们可以使用这个比较器来对 ArrayList<Person>
进行排序,示例代码如下:
Collections.sort(persons, nameComparator);
在上述代码中,我们将 persons
对象和 nameComparator
比较器传入 Collections.sort()
方法中,即可完成对 persons
对象的排序。
要按照 Person
对象的 age
属性排序,我们与按照 name
属性排序类似,同样需要创建一个比较器来实现排序规则。在比较器中,我们需要调用 Person
对象的 getAge()
方法,获取其 age
属性,并将其与其他 Person
对象的 age
属性进行比较。比较器的示例代码如下:
Comparator<Person> ageComparator = new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
};
在上述代码中,我们同样实现了 Comparator<Person>
接口,并重写了其中的 compare()
方法,但与之前不同的是,我们使用 getAge()
方法获取 age
属性,并使用减法来比较其大小。这个方法的返回值为负数,则表示 o1
小于 o2
;返回值为正数,则表示 o1
大于 o2
;返回值为 0,则表示 o1
等于 o2
。
接下来,我们同样可以使用这个比较器来对 ArrayList<Person>
进行排序,示例代码如下:
Collections.sort(persons, ageComparator);
在上述代码中,我们将 persons
对象和 ageComparator
比较器传入 Collections.sort()
方法中,即可完成对 persons
对象的排序。
我们可以通过实现比较器来指定排序规则,然后使用 Collections.sort()
方法来对 ArrayList 进行排序。这种方式通常适用于需要按照对象的某个属性进行排序的场景,例如按照商品价格进行排序、按照学生分数进行排序等等。