对List中的元素进行排序,可以使用List自带的sort()
方法,使用时,我们需要向其传入一个实现的Comparator
接口
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
下面为List
public static void main(String[] args) {
List<Integer> list=new ArrayList();
list.add(-1);
list.add(3);
list.add(3);
list.add(-5);
list.add(7);
list.add(-9);
list.add(4);
System.out.println("原始数组:"+list);
list.sort(new Comparator<Integer>(){
//实现升序排序
public int compare(Integer i1,Integer i2){
return i1-i2;
}
});
System.out.println("升序排序后的数组:"+list);
}
如果想要进行降序排序,那么在进行比较时,在return i1-i2
这里前面加一个负号就可以了,那么就变成
//实现降序排序
list.sort(new Comparator<Integer>(){
public int compare(Integer i1,Integer i2){
return i2-i1;
}
});
如果集合中的元素为复杂类型的对象,那么想为其进行排序,需要在创建对象的时候就让其实现Comparable
接口
Person
public class Person implements Comparable<Person>{
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int compareTo(Person another){
//先按照年龄升序
if(this.age!=another.age){
return this.age-another.age;
}else{
//年龄相同,则按照名字升序
return this.name.compareTo(another.name);
}
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
测试:
public static void main(String[] args) {
List<Person> personList=new ArrayList(10);
personList.add(new Person(18,"zhangsan"));
personList.add(new Person(18,"lisi"));
personList.add(new Person(19,"zhongli"));
personList.add(new Person(20,"azzz"));
personList.add(new Person(18,"azhangsan"));
System.out.println("Person排序前:"+personList);
personList.sort(new Comparator<Person>(){
public int compare(Person p1,Person p2){
return p1.compareTo(p2);
}
});
System.out.println("Person排序后:"+personList);
}
运行结果:
Person排序前:[Person{age=18, name='zhangsan'}, Person{age=18, name='lisi'},
Person{age=19, name='zhongli'}, Person{age=20, name='azzz'},Person{age=18, name='azhangsan'}]
Person排序后:[Person{age=18, name='azhangsan'}, Person{age=18, name='lisi'},
Person{age=18, name='zhangsan'}, Person{age=19, name='zhongli'}, Person{age=20, name='azzz'}]
排序技巧:
返回负数,则第一个参数放前面
比如
list.sort(new Comparator<Integer>(){
//实现升序排序
public int compare(Integer i1,Integer i2){
return i1-i2;
}
});
假如i1 假如i2//实现降序排序
list.sort(new Comparator<Integer>(){
public int compare(Integer i1,Integer i2){
return i2-i1;
}
});