如何使用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); } }