ArrayList.sort & Collections.sort

有关于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.方法名,看起来比较规整,起帮助作用而已。

猜你喜欢

转载自www.cnblogs.com/exigeslover/p/11961332.html