Java中List的排序
程序员文章站
2022-06-10 22:16:27
...
ArrayList的两种排序方法
- Collections.sort(List <T>list);
- 使用Comparator接口
Collections.sort
该方法必须实现Comparable接口。该例中,Integer实现了Comparable接口所以可以使用。
int a[] = {1, 32, 3, 2, 6, 7, 4};
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 7; i++) {
list.add(a[i]);
}
for (int t : list)
System.out.print(t + " ");
System.out.println();
//Collections的sort方法,传入要排序的集合
Collections.sort(list);
for (int t : list)
System.out.print(t + " ");
输出结果:1 32 3 2 6 7 4 1 2 3 4 6 7 32
使用Comparator接口
int a[] = {1, 32, 3, 2, 6, 7, 4};
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 7; i++) {
list.add(a[i]);
}
for (int t : list)
System.out.print(t + " ");
System.out.println();
Comparator comparator = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if ((int) o1 < (int) o2)
return 1;
return -1;
}
};
list.sort(comparator);
System.out.println();
这里注意两个地方
- return 语句中,如果if成立和if不成立的返回值在JDK1.7之后必须为相反值。如果不是相反值,执行无效。
- o1 如果大于o2我们实现的是升序排序,如果o1小于o2,则是降序排列
另外我们还注意到,除了Comparator接口,还有一个Comparable接口。
这个Comparable接口是什么意思呢?Comparable实现对类的排序,换言之,如果一个类继承了Comparable接口,我们可以说这个类可以被排序,即可以使用Collections.sort(List<T> list)。而Comparator的意思是,一个不能被排序的类,我们通过使用Comparator接口,对他进行排序。
Comparable接口的使用
我们来假定一个类Person,里面有两个属性 int age和String name,如果我们想把Person类的对象按age的大小排序怎么实现?
1.我们可以把Person类,使用泛型装入集合中。
2.使用Collections.sort(List <T> list)进行排序,该sort方法必须实现Comparable接口
public class Person implements Comparable<Person> {
int age;
String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
@Override
public int compareTo(Person person) {
return name.compareTo(person.name);
//假设我们通过 x.compareTo(y) 来“比较x和y的大小”。
// 若返回“负数”,意味着“x比y小”;
// 返回“零”,意味着“x等于y”;
// 返回“正数”,意味着“x大于y”。
}
}
public class Test {
public static void main(String[] args) {
List<Person> list =new ArrayList<>();
list.add(new Person(20,"李四"));
list.add(new Person(19,"张三"));
list.add(new Person(21,"王五"));
Collections.sort(list);
for (Person p :list)
System.out.println(p.toString());
}
}
输出:Person{age=19, name='张三'}
Person{age=20, name='李四'}
Person{age=21, name='王五'}
上一篇: 【Java】关于Map解析List
下一篇: 父亡子继的家天下制度是从什么时候开始的?