这里给出针对ArrayList自定义排序的两种方法的详细攻略,分别为使用Comparator接口和使用Comparable接口。
1.使用Comparator接口
Comparator接口是JAVA中的一个接口, 我们可以在其中实现自定义的一些比较规则, 然后使用这些规则去对一些数据进行排序。
接下来是这种方式的实现步骤:
第一步:定义比较规则
我们需要实现Comparator接口,实现其中的compare方法,例如:
public class MyComparator implements Comparator<Integer>{
public int compare(Integer i1, Integer i2){
return i1 - i2;
}
}
以上代码中,MyComparator类实现了Comparator接口,也定义了compare方法。我们在该方法中比较了两个整数i1和i2,将它们相减并返回。这表示如果i1大于i2,则返回一个正数;如果i1小于i2,则返回一个负数;如果i1等于i2,则返回零。在这里,我们按升序排序。
第二步:使用Comparator进行排序
现在我们已经实现了比较规则,我们需要将这个规则应用到我们的数据中,以便对数据进行排序。
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(2);
list.add(1);
list.add(3);
Collections.sort(list, new MyComparator());
以上代码中,我们创建了一个ArrayList,添加了3个整数。然后我们调用了Collections.sort()方法,该方法接受两个参数,第一个参数是要排序的数据,这里是我们创建的ArrayList。第二个参数是我们实现的比较规则,这里是MyComparator类的一个实例。
最后,当我们打印出ArrayList中的所有元素时,我们将会看到已经按照我们的规则升序排列。
示例1
接下来,我们将演示一个更具体的示例。
我们创建一个名称为Person的类,含有两个字段,分别为名字和年龄。现在我们想按照年龄升序对Person对象进行排序。
class Person {
private String name;
private int age;
public Person(String name,int age) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name
}
}
class PersonAgeComparator implements Comparator<Person> {
public int compare(Person p1, Person p2) {
return p1.getAge() - p2.getAge();
}
}
// 使用这个比较器排序
ArrayList<Person> persons = new ArrayList<Person>();
persons.add(new Person("Bob", 25));
persons.add(new Person("Alice", 18));
Collections.sort(persons, new PersonAgeComparator());
在此示例中,我们创建了一个名为Person的类和一个名为PersonAgeComparator的比较器类。该比较器实现了Comparator
最后,我们创建了一个ArrayList
2.使用Comparable接口
除了使用Comparator接口对集合进行排序之外,我们还可以使用实现了Comparable接口的数据类型来对集合进行排序。实现Comparable接口的数据类型可以直接使用Collections.sort()方法进行升序排列。
当我们实现了Comparable接口时,我们需要提供一个compareTo()方法,该方法将定义我们的数据类型与其他类型的比较规则。
第一步:定义比较规则
下面是一个实现了Comparable接口的Person类及其compareTo()方法的示例:
class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
@Override
public int compareTo(Person p) {
return this.getAge() - p.getAge();
}
}
在这个示例中,我们创建了一个名为Person的类,这个类实现了Comparable
我们可以在Person类中添加其它方法,例如构造函数、获取方法等。
第二步:利用Comparable进行排序
一旦我们已经实现了Comparable接口,我们便可以使用Collections.sort()方法对我们的数组进行升序排列,例如:
ArrayList<Person> persons = new ArrayList<Person>();
persons.add(new Person("Bob", 25));
persons.add(new Person("Alice", 18));
Collections.sort(persons);
我们只需调用Collections.sort()方法并将Person对象的ArrayList作为参数即可对Person对象按照年龄进行排序,利用的是compareTo()方法。
示例2
下面是另一个示例。在这个示例中,我们打算创建一个名为“Employee”的类,该类具有三个字段:姓名、年龄和薪水。我们将通过比较薪水来对Employee对象进行排序。
class Employee implements Comparable<Employee> {
private String name;
private int age;
private double salary;
public Employee(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
public int getAge() {
return age;
}
public double getSalary() {
return salary;
}
public String getName() {
return name;
}
@Override
public int compareTo(Employee emp) {
return Double.compare(this.salary, emp.getSalary());
}
}
ArrayList<Employee> employees = new ArrayList<Employee>();
employees.add(new Employee("Alice", 25, 5000));
employees.add(new Employee("Bob", 20, 3000));
Collections.sort(employees);
在这个示例中,我们创建了一个Employee类并实现了Comparable
所以这就是两种常见的方法,用于ArrayList自定义排序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java针对ArrayList自定义排序的2种实现方法 - Python技术站