如何使用比较器对 ArrayList 进行排序? [复制]
Posted
技术标签:
【中文标题】如何使用比较器对 ArrayList 进行排序? [复制]【英文标题】:How to sort ArrayList using Comparator? [duplicate] 【发布时间】:2014-04-14 08:57:34 【问题描述】:我有一个实现静态方法的班级学生
public static Comparator<Student> getCompByName()
为学生返回一个新的比较器对象,比较 2 个学生对象 通过属性“名称”。
我现在需要通过使用我的函数 getCompByName() 按“姓名”对学生 ArrayList 进行排序来测试这一点。
这是我的 Student 类中的 Comparator 方法。
public static Comparator<Student> getCompByName()
Comparator comp = new Comparator<Student>()
@Override
public int compare(Student s1, Student s2)
return s1.name.compareTo(s2.name);
;
return comp;
我需要测试的主要地方
public static void main(String[] args)
// TODO code application logic here
//--------Student Class Test-------------------------------------------
ArrayList<Student> students = new ArrayList();
Student s1 = new Student("Mike");
Student s2 = new Student("Hector");
Student s3 = new Student("Reggie");
Student s4 = new Student("zark");
students.add(s1);
students.add(s2);
students.add(s3);
students.add(S4);
//Use getCompByName() from Student class to sort students
谁能告诉我如何在我的 main 中使用 getCompByName() 来实际按名称对 ArrayList 进行排序?我是比较器的新手,并且很难使用它们。该方法返回一个比较器,所以我不确定这将如何实现。我知道我需要使用 getCompByName() 来排序,我只是不确定如何实现它。
【问题讨论】:
首先,选择你喜欢的排序算法。 @SotiriosDelimanolis 我需要使用 getCompByName() 进行排序,而不是其他算法Collections.sort(students, getCompByName())
我想你误解了Comparator
的作用。它本身只是比较两个元素。您必须实际编写(或使用 JDK 中的)排序算法。
@user3345200 你可能想看看Object Ordering上的官方教程。它简洁且写得很好,很好地解释了如何实现和使用Comparator
对对象进行排序。
【参考方案1】:
使用Collections.sort(List, Comparator) 方法:
Collections.sort(students, Student.getCompByName());
在您的代码中,最好在声明List
时使用List
接口:
List<Student> students = new ArrayList();
您还可以通过使用 Student[]
并将其传递给 ArrayList
构造函数来收紧代码:
public static void main(String[] args)
Student[] studentArr = new Student[]new Student("Mike"),new Student("Hector"), new Student("Reggie"),new Student("zark");
List<Student> students = new ArrayList<Student>(Arrays.asList(studentArr));
Collections.sort(students, Student.getCompByName());
for(Student student:students)
System.out.println(student.getName());
这是Gist of the full source。
【讨论】:
那是Collections.sort(*List*, Comparator)
。
@CostiCiudatu 谢谢,已更新。【参考方案2】:
使用Collections.sort()
:
Collections.sort(students, getCompByName());
注意:使您的比较器成为private static final
变量可能很有用。
注2:修改列表就地;不会创建新列表。
【讨论】:
以上是关于如何使用比较器对 ArrayList 进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Comparable Interface比较ArrayList中对象的多个属性? [重复]
java 对数组列表进行排序。使用比较器。链接:https://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects