如何使用Object参数对Arraylist中的对象进行排序

我在排序Arraylist中的对象时遇到问题,因为我是排序对象的新手。

对arraylist进行排序是非常基本的,但是对对象的arraylist进行排序是完全不同的事情。 基本上我一直在堆栈溢出代码,人们似乎使用比较器来解决他们的问题,但他们没有解释如何实际调用该方法并将其投入使用,这就是我在这里的原因。

使用下面的代码,我试图用参数 – 字符串名称,int年龄和字符串课程对学生的arraylist进行排序。 然后我有另一个类来存储Student对象并在类中对它们进行排序。 这是我有的:

Student.java

public class Student { private String name, course; private int age; public Student(String name, int age, String course) { this.name = name; this.age = age; this.course = course; } public String getName() { return name; } public int getAge() { return age; } public String getCourse() { return course; } } 

CompareObj.java

 import java.util.*; public class CompareObj implements Comparator{ private ArrayList sList; public CompareObj() { sList = new ArrayList(); } @Override public int compare(Student s1, Student s2) { return s2.getName().compareTo(s1.getName()); } public void add(Student s1) { sList.add(s1); } public void displayList() { for(int i = 0; i<sList.size();i++) { System.out.println(sList.get(i).getName()); } } } 

在CompareObj类中,如何使用已实现的方法compare(s1,s2),如何使用此方法对学生对象的arraylist进行排序?

 how can i use this method to sort my arraylist of student objects? 

您不需要自己调用compare() 。 您可以将比较器传递给Collections.sort() ,它将通过调用compare()方法为您排序。


通过使用自定义类CompareObj

 Collections.sort(studentList, new CompareObj()); 

或者没有CompareObj另一种方式是,

 Collections.sort(studentList,new Comparator() { @Override public int compare(Student s1, Student s2) { return s1.getName().compareToIgnoreCase(s2.getName()); } }); 

您的CompareObj类混合了ArrayList (通过encapuslation)和Comparator (通过实现接口)。 你不需要它,实现Comparator就足够了。

请尝试以下方法:

 ArrayList students = new ArrayList(); // fill the ArrayList... Collections.sort(students, new CompareObj()); 

这将按照您的CompareObj类中的指定按名称对student进行排序。

您可以使用Arrays.sort()方法

 Arrays.sort(studentArray, new CompareObj ()); 

但是,如果您认为名称是一种自然排序学生的方式,那么让您的Student类实现Comparable接口并覆盖compareTo()方法。

在ArrayList中对元素进行排序的示例

 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class ArrayListSorting { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList al=new ArrayList<>(); al.add("a"); al.add("b"); al.add("c"); al.add("d"); al.add("e"); System.out.println("Before sorting"); System.out.println(al); Collections.sort(al,new ArrayCustomizedSorting()); System.out.println("After sorting"); System.out.println(al); } } class ArrayCustomizedSorting implements Comparator{ @Override public int compare(String o1, String o2) { // TODO Auto-generated method stub return -o1.compareTo(o2); } }