sort()对ArrayList进行排序?
Java中,ArrayList是一种动态数组,可以动态地增加或减少其大小。它提供了按照插入顺序访问的高效方法,可以方便地进行访问、添加、删除和修改操作。但有时候需要对ArrayList进行排序,这时就需要用到sort()方法。
sort()方法是List接口中的一个默认方法,可以对list中的元素进行排序。在使用sort()方法排序之前,需要保证待排序的元素实现了Comparable接口或者创建一个Comparator对象。
如果待排序的元素实现了Comparable接口,则默认采用元素本身的自然顺序进行排序。自然顺序是元素本身具备的一种有意义的排序方式。在Java中,有些数据类型已经实现了Comparable接口,如String、Integer等。
接下来是用sort()方法对ArrayList进行排序的实现:
1. 对ArrayList中的元素进行排序
import java.util.ArrayList;
import java.util.Collections;
public class TestSort {
public static void main(String[]args) {
ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("pear");
list.add("banana");
list.add("orange");
Collections.sort(list);
System.out.println(list);
}
}
输出结果为:[apple, banana, orange, pear]
2. 对自定义类的对象进行排序
对于自定义类的对象进行排序时,需要实现Comparable接口或创建一个Comparator对象,自然顺序就是对象的Comparable接口的compareTo方法的实现。
例如,定义一个Person类,其中有name和age两个成员变量,需要根据age进行排序。
import java.util.ArrayList;
import java.util.Collections;
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int compareTo(Person p) {
return age - p.getAge();
}
}
public class TestPerson {
public static void main(String[]args) {
ArrayList<Person> list = new ArrayList<Person>();
list.add(new Person("Tom", 20));
list.add(new Person("Jack", 18));
list.add(new Person("Lucy", 22));
list.add(new Person("Lily", 23));
Collections.sort(list);
System.out.println(list);
}
}
输出结果为:[{name=Jack, age=18}, {name=Tom, age=20}, {name=Lucy, age=22}, {name=Lily, age=23}]
3. 使用Comparator对象进行排序
当待排序的元素没有实现Comparable接口,或者需要按照不同的规则进行排序时,可以创建一个Comparator对象来实现排序。Comparator接口有一个compare方法,用于比较两个对象的大小关系。
Comparator对象可以通过匿名内部类实现,也可以实现一个Comparator接口的实现类,在sort方法中传入该实现类的对象即可。
假设有一个Person类,其中包括name和salary两个成员变量。在排序时需要根据salary的大小进行排序,代码如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Person {
private String name;
private double salary;
public Person(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
public class TestPerson {
public static void main(String[]args) {
ArrayList<Person> list = new ArrayList<Person>();
list.add(new Person("Tom", 3000));
list.add(new Person("Jack", 5000));
list.add(new Person("Lucy", 4000));
list.add(new Person("Lily", 6000));
Comparator<Person> comparator = new Comparator<Person>() {
public int compare(Person p1, Person p2) {
return Double.compare(p1.getSalary(), p2.getSalary());
}
};
Collections.sort(list, comparator);
System.out.println(list);
}
}
输出结果为:[{name=Tom, salary=3000.0}, {name=Lucy, salary=4000.0}, {name=Jack, salary=5000.0}, {name=Lily, salary=6000.0}]
综上所述,使用sort()方法可以很方便地对ArrayList进行排序。可以根据元素本身的自然顺序进行排序,也可以通过实现Comparable接口或创建Comparator对象实现对自定义类的对象的排序。
