版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/KLH_BAHK/article/details/88875332
字符串
List<String> list = new ArrayList<>();
list.add("111");
list.add("555");
list.add("444");
list.add("333");
list.add("222");
System.out.println("排序前:" + list);
Collections.sort(list);
System.out.println("排序后:" + list);
输出结果为:
排序前:[111, 555, 444, 333, 222]
排序后:[111, 222, 333, 444, 555]
String源码分析
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
}
从上述源码可以看出,String类实现了Comparable接口,所以可以直接对list集合中的String进行排序操作。
对象
要想对集合中的Person对象进行排序操作,有两种实现方式:
- Person对象实现Comparable接口,并重写其中的comparaTo方法。
class Person implements Comparable<Person>{
private String name;
private Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
// 省略get、set方法
// 省略toString方法
@Override
public int compareTo(Person o) {
return this.getAge().compareTo(o.getAge());
}
}
List<Person> list = new ArrayList<>();
list.add(new Person("ddd", 40));
list.add(new Person("bbb", 20));
list.add(new Person("aaa", 10));
list.add(new Person("ccc", 30));
System.out.println("排序前:" + list);
Collections.sort(list);
System.out.println("排序后:" + list);
输出结果:
[Person{name=‘aaa’, age=10}, Person{name=‘bbb’, age=20}, Person{name=‘ccc’, age=30}, Person{name=‘ddd’, age=40}]
- 调用Collections对象的sort方法的另一个重载方法,将一个匿名的Comaprator对象作为参数传递进去。
// 1.匿名函数方式
Collections.sort(list1, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge().compareTo(o2.getAge());
}
});
// 2.函数式接口方式
Collections.sort(list, Comparator.comparing(Person::getAge));
输出结果:
[Person{name=‘aaa’, age=10}, Person{name=‘bbb’, age=20}, Person{name=‘ccc’, age=30}, Person{name=‘ddd’, age=40}]