集合的排序
* 集合的工具类java.util.Collections下有一个静态方法:sort,可以对List集合进行自然排序(从小到大)
新建一个随机数的数组:
Random random = new Random(); Listlist = new ArrayList<>(); for (int i =0;i<10;i++){ list.add(random.nextInt(100)); }
排序自定义类型元素System.out.println(list); //排序前队列
Collections.sort(list); //排序的关键语句
System.out.println(list); //排序后队列
新建一个集合用于示例:
Listlist = new ArrayList<>(); list.add(new Point(5,6)); list.add(new Point(25,54)); list.add(new Point(1,16)); list.add(new Point(2,9)); list.add(new Point(7,3)); list.add(new Point(43,4)); list.add(new Point(12,45)); System.out.println(list);
方法语句:Collections.sort(List list);
该方法要求List集合中的元素必须是可比较的,判定是否可比较的标准为元素是否实现了接口
java.util.Comparable
当我们使用一个API时,该API反过来要求我们为其修改代码,那么这个API就对我们的程序有侵入性,侵入性不利于程序后期维护,应当尽量避免
单独定义比较器(定义Point元素的比较规则)
compare方法用于定义o1和o2比较大小的规则,并用返回值表达大小关系.
返回值实现的要求:
如果返回值>0则表达的是o1>o2
如果返回值<0则表达的是o1
Comparatorc = new Comparator () { public int compare(Point o1, Point o2) { int olen1 = o1.getX()*o1.getX()+o1.getY()*o1.getY(); int olen2 = o2.getX()*o2.getX()+o2.getY()*o2.getY(); return olen1-olen2;//升序 return olen2-olen1;//反过来减就是降序(从大到小) } };
简略写法:
Collections.sort(list,(o1,o2)->
o1.getX()*o1.getX()+o1.getY()*o1.getY()-
o2.getX()*o2.getX()-o2.getY()*o2.getY()
);



