java如何使用对象参数对Arraylist中的对象进行排序
我在Arraylist中排序对象时遇到问题,因为我不熟悉排序对象
对arraylist进行排序是非常基本的,但对对象的arraylist进行排序则是完全不同的事情。基本上,我一直在研究堆栈溢出中的代码,人们似乎使用比较器来解决他们的问题,但他们没有解释如何实际调用该方法并将其投入使用,这就是我在这里的原因
通过下面的代码,我尝试使用参数对学生的arraylist进行排序-字符串名称、整数年龄和字符串课程。然后我有另一个类来存储学生对象,并在类中对它们进行排序。以下是我所拥有的:
学生。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;
}
}
比较bj。java
import java.util.*;
public class CompareObj implements Comparator<Student>{
private ArrayList<Student> sList;
public CompareObj() {
sList = new ArrayList<Student>();
}
@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进行排序
# 1 楼答案
您可以使用数组排序算法
# 2 楼答案
对ArrayList中的元素进行排序的示例
# 3 楼答案
您可以使用
Arrays.sort()
方法然而,如果您认为名称是自然排序学生的一种方式,那么让您的
Student
类实现Comparable
接口并重写compareTo()
方法# 4 楼答案
您的类
CompareObj
混合了ArrayList
(通过封装)和Comparator
(通过实现接口)。您不需要这样,实现Comparator
就足够了请尝试以下操作:
这将按照
CompareObj
类中指定的名称对student
进行排序# 5 楼答案
你不需要自己打电话给
compare()
。您只需将比较器传递给Collections.sort()
,它将通过调用compare()
方法为您进行排序通过使用自定义类
CompareObj
或者没有
CompareObj
的另一种方式是