我们在前面介绍了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 的列表允许加入字符串类型,该功能就提供了一种检查方法。