有关于sort方法我在考试中比较着急,想要去用ArrayList.sort结果发现报错
在搜索sort方法时众说纷纭,于是紧急用了Collections.sort()
现在重新整理目前用到的sort方法的实现方式:
1.Collections.sort()
Collections和Collection是不一样的,Collection是List、Set、Queue的父类,这个一定要清楚,不要认错了还觉得调用的是Collection父类里的静态方法
Collections不属于集合框架,是单独的工具类
列举一下常用方法:
void reverse(List list)//反转
void shuffle(List list)//随机排序
void sort(List list)//按自然排序的升序排序
void sort(List list, Comparator c)//定制排序,由Comparator控制排序逻辑
void swap(List list, int i , int j)//交换两个索引位置的元素
void rotate(List list, int distance)//旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。
使用时是Collections.方法名进行的操作,是静态方法,参数是List对象
2.ArrayList.sort()
确切来说,应该叫ArrayList的sort()方法,因为这不是静态方法,ArrayList对象中怎么写的,子类中怎么重写的就怎么使用
如animals.sort(),在“唐城动物园”项目中有一个ArrayList对象animals,就可以这么使用
1 public void aniSort(){ 2 animals.sort((a,b)->{ 3 if(a.getAge()>b.getAge()) 4 return 1; 5 else 6 return -1; 7 }); 8 }
类比:而如果此处用Collections.sort()方法
public void aniSort(){ Collections.sort(animals,(a,b)->{ if(a.getAge()>b.getAge()) return 1; else return -1; }); }
详解:
Collections工具类里的方法实际还是对List对象操作,和我们这样没有本质区别
public static <T extends Comparable<? super T>> void sort(List<T> list) { list.sort(null); }
public static <T> void sort(List<T> list, Comparator<? super T> c) { list.sort(c); }
无非内部还是我们的List对象.sort()方法,其实Collections就是这样封装好的大量方法,内部实现还是用到的对应类的方法
只不过这样用起来是Collections.方法名,看起来比较规整,起帮助作用而已。