java.util.Collections类
Collections是集合的工具类,里面定义了很多静态方法用于操作集合
Collections.sort(List list)方法
可以对List集合进行自然排序(从小到大)
public class SortListDemo1 {
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);
}
}
/*
编译不通过的原因:
Collections.sort(List list)该方法要求集合中的元素类型必须实现接口:Comparable
该接口中有一个抽象方法compareTo,这个方法用来定义元素之间的比较大小的规则,
所以只有实现了该接口的元素才能利用这个方法比较出大小而实现排序操作
*/
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);
}
}
实际开发中,我们并不会让我们定义的类(如果该类作为集合元素使用)去实现Comparable接口,
因为这对我们的程序有侵入性
**侵入性:**当我们调用某个API功能时,其要求我们为其修改其他额外的代码这个现象就是侵入性。
侵入性越强的API越不利于程序的后期可维护性,应当尽量避免。
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);
Comparator<Point> com=new Comparator<Point>() {
@Override
/**
* 实现比较器接口后必须重写方法compare
* 该方法用来定义参数o1与参数o2的比较大小规则
* 返回值用来表示o1与o2的大小关系
*/
public int compare(Point o1, Point o2) {
int len1=o1.getX()*o1.getX()+o1.getY()*o1.getY();
int len2=o2.getX()*o2.getX()+o2.getY()*o2.getY();
return len1-len2;
}
};
Collections.sort(list,com);//回调模式
System.out.println(list);
}
}
Collections.sort(list,(o1,o2)->
o1.getX()*o1.getX()+o1.getY()*o1.getY()-
o2.getX()*o2.getX()-o2.getY()*o2.getY()
);
java中提供的类,如:String,包装类都实现了Comparable接口,但是有时候这些
比较规则不能满足我们的排序需求时,同样可以临时提供一种比较规则来进行排序
public class SortListDemo3 {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("苍老师");
list.add("传奇");
list.add("小泽老师");
list.add("科比布莱恩特");
Collections.sort(list,(o1, o2) -> o1.length()-o2.length());
System.out.println(list);
list.add("鲲");
list.sort((o1, o2) -> o1.length()-o2.length());
System.out.println(list);
list.add("克晶老师");
Collections.sort(list, Comparator.comparingInt(String::length));
System.out.println(list);
}
}
