如何使用比较器对 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 进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

ArrayList排序Sort()方法(转)

如何使用Comparable Interface比较ArrayList中对象的多个属性? [重复]

Java中如何对集合排序

java 对数组列表进行排序。使用比较器。链接:https://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects

如何使用多个排序标准对 ArrayList 进行排序?

使用与数组相同的算法对 ArrayList 进行排序