集合的排序
SortListDemo
package collection;
import java.util.*;
/**
* 集合的排序
* 集合的工具类java.util.Collections提供了一个静态的方法sort,可以对List进行自然排序
*/
public class SortListDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
Random random = new Random();
for(int i=0;i<10;i++){
list.add(random.nextInt(100));
}
System.out.println(list);
//自然排序 从小到大排序
Collections.sort(list);
System.out.println(list);
}
}
SortListDemo2
package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* 自定义类型排序
*/
public class SortListDemo2 {
public static void main(String[] args) {
List<Point> list = new ArrayList<>();
list.add(new Point(1, 2));
list.add(new Point(97, 88));
list.add(new Point(7, 6));
list.add(new Point(9, 9));
list.add(new Point(5, 4));
list.add(new Point(2, 3));
System.out.println(list);
/*
* Collections.sort(list);在排序List集合时,要求集合元素必须实现了
* Comparator接口,实现了该接口的了必须重写一个方法,compare用于定义比较
* 大小的规则,从而进行元素键的比较后排序,否则编译不通过
* 侵入性:
* 当我们调用某个API时,其反过来要求我们为其修改其他额外的代码,
* 这种现象就称之为侵入性,侵入性不利于程序后期的维护,尽可能避免
* */
// Collections.sort(list,new Comparator<Point>() {
// @Override
// public int compare(Point o1, Point o2) {
// /*
// * 定义两个参数o1和o2比较大小的规则
// * 返回值表示o1和o2的大小关系
// * */
// int len1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
// int len2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
// return len1-len2;
// }
// });//回调模式
//使用了lambda表达式省略了接口的声明和方法的重写体
// Collections.sort(list, (o1, o2) -> {
// int len1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
// int len2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
// return len1-len2;
// });//回调模式
//省略了花括号,并且省略了return
Collections.sort(list, (o1, o2) ->
o1.getX()*o1.getX()+o1.getY()*o1.getY()-
o2.getX()*o2.getX()+o2.getY()*o2.getY()
);//回调模式
System.out.println(list);
}
}
SortListDemo3
package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* 排序字符串
*/
public class SortListDemo3 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("老安");
list.add("小李子帅");
list.add("刘文波");
System.out.println(list);
//Collections.sort(list);
//Collections.sort(list,(o1,o2)->o1.length()-o2.length());
//String::length 引用了String的length 相当于比较 o1.length() 和 o2.length
Collections.sort(list, Comparator.comparingInt(String::length));
System.out.println(list);
}
}