【集合】Collections工具类
一、Collections定义
java.util.Collections 是一个包装类。它包含有各种集合操作的 静态多态方法。此类 不能实例化,就像一 个工具类,服务于Java的Collection框架。
其定义:
public class Collections {
....
}
二、Collections常用静态方法
1. emptyList()方法
参考:https://blog.csdn.net/u011595939/article/details/80655788 https://baijiahao.baidu.com/s?id=1633306638148611870&wfr=spider&for=pc
【emptyLsit()方法定义】
{
public static final List EMPTY_LIST = new EmptyList<>();
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
private static class EmptyList<E> {
....
}
}
【作用】:
-
Collections.emptyList()方法实际上就是返回了一个空的List(size为0的List对象),但是这个List和我们平时常用的那个List是不一样的。这个方法返回的List是Collections类的一个静态内部类,它继承AbstractList后并没有实现add()、remove()等方法,因此这个返回值List并不能增加删除元素。
-
既然这个List不能进行增删操作,那么它有何意义呢?
有时候我们在函数中需要返回一个List,但是这个List是空的。
- 有人会说,返回null也行啊。如果我们直接返回null的话,调用者还需要进行null的判断。所以一般建议返回一个空的List。
- 又有人说,我直接返回一个new ArrayList()呗,但是new ArrayList()在初始化时会占用一定的资源。所以还是建议返回一个空的List。
-
如上可以看到,Collections.EMPTY_LIST返回的是一个空的List。EMPTY_LIST和emptyList()方法啥区别呢? -两者的唯一区别是:Collections. emptyList()支持 泛型 ,所以在需要泛型的时候,可以使用Collections. emptyList()。
2. 类似的还有empty方法
emptySet()/EMPTY_SET、emptyMap()/EMPTY_MAP
3. List对应集合的排序类方法
(1)洗牌方法shuffle:将当前集合内的数据进行随机排序。
public static void shuffle(List<?> list)
public static void shuffle(List<?> list, Random rnd)
(2)升序排序Sort
//类型需是实现(比较器)Comparable接口的类,此方法只使用一种排序方案,这种方案叫作“自然比较”方案。
public static <T extends Comparable<? super T>> void sort(List<T> list) {
list.sort(null);
}
//参数c指定一个排序比较器,使用此比较器进行排序排序顺序。
public static <T> void sort(List<T> list, Comparator<? super T> c) {
list.sort(c);
}
....
(3)逆序排序Reverse:对当前集合的元素按照相反的顺序进行排序
public static void reverse(List<?> list)
4. SingletonList()方法
Collections.singletonList()返回的是不可变的集合,但是这个长度的集合只有1 。
public static <T> List<T> singletonList(T o) {
return new SingletonList<>(o);
}
三、CollectionsUtils定义
在org.apach.commonscollection4包中还提供了CollectionsUtils工具类。如其提供集合是否为空判断:CollectionsUtils.isEmpty(List)、CollectionsUtils.isNotEmpty(List)。