我们在前面介绍了Arrays,它是一个用于操作数组的工具类,它给我们提供了大量的工具方法。

既然数组操作都这么方便了,集合操作能不能也安排点高级的玩法呢?那必须的,JDK为我们准备的Collocations类就是专用于集合的工具类,比如我们想快速求得List中的最大值和最小值:

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    Collections.max(list);
    Collections.min(list);
}

对一个集合进行二分搜索(要求必须实现 Comparable 且为有序的):Collections.binarySearch(Object, value)

public static void main(String[] args) {
    List<Integer> list = Arrays.asList(2, 3, 8, 9, 10, 13);
    System.out.println(Collections.binarySearch(list, 8));
}
 

对集合的元素进行快速填充,注意这个填充是对集合中已有的元素进行覆盖:Collections.fill(Object, value)

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5));
    Collections.fill(list, 6);
    System.out.println(list);
}

如果集合中本身没有元素,那么fill操作不会生效。

获得一个空集合:.Collections.empyXXX

public static void main(String[] args) {
    List<Integer> list = Collections.emptyList();
      //Collections.singletonList() 会生成一个只有一个元素的List
    list.add(10);   //不支持,会直接抛出异常
}

返回可修改集合的一个只读集合:Collections.unmodifiableXXX

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5));
    List<Integer> newList = Collections.unmodifiableList(list);
    newList.add(10);   //不支持,会直接抛出异常
}

搜索子集和开始的下标:Collections.indexOfSubXXX

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5));
    System.out.println(Collections.indexOfSubList(list, Arrays.asList(4, 5)));
}

检测集合中是否都为指定类型:Collections.checkedXXX(Objcet, class)

public static void main(String[] args) {
    List list = new ArrayList<>(Arrays.asList(1,2,3,4,5));
    list = Collections.checkedList(list, Integer.class);   //这里的.class关键字我们会在后面反射中介绍,表示Integer这个类型
      list.add("aaa");
    System.out.println(list);
}

这个功能用于因为泛型机制导致如果我们忘了指定类型,默认是Object类型,导致本来一个全是 Integer 的列表允许加入字符串类型,该功能就提供了一种检查方法。