Collections 里面的几个你还不知道的方法

java.util.Collections 这个类你可能知道,也可能经常用里面的像 sort()reverse() 这样的方法。但这个类当中还有几个方法,估计你到现在还不知道,还在自己手写循环来实现。

✦ boolean disjoint(Collection<?> c1, Collection<?> c2)`

这个方法检查两个集合是否没有相同元素。如果存在相同元素则返回 false,否则返回 true。

✦ emptyList() / emptyMap() / emptySet()

这些方法创建空的 List / Map / Set。有人会问,我直接用 new ArrayList() 不就好了?其实区别在于,这些方法创建的空集合都是保证永远为空,不允许添加元素进去的。

✦ void fill(List<? super T> list, T obj)

这个方法用一个指定的对象来替换集合中的所有元素。比如你要对某个集合“清零”,同时保持集合的元素数量不变,那么可以用这个方法。

✦ boolean replaceAll(List<T> list, T oldVal, T newVal)

这个方法将集合中的指定元素全部替换成新元素。

✦ ArrayList<T> list(Enumeration<T> e)

这个方法帮你将一个 Enumeration 对象转换为 ArrayList 对象。比如说我们要得到 HttpServletRequest 对象中所有的参数名,就可以写:

ArrayList<String> paramNames = Collections.list(request.getParameterNames());

✦ min(Collection<? extends T> coll) / max(Collection<? extends T> coll) / min(Collection<? extends T> coll, Comparator<? super T> comp) / max(Collection<? extends T> coll, Comparator<? super T> comp)

这些方法用来从集合中取最大最小值,你还可以传入自定义的用来比较元素大小的方法。

✦ void rotate(List<?> list, int distance)

这个方法用来“滚动”集合的元素,比如当 distance 为 1 时,表示所有元素向右滚动一位,其中最后一个元素滚动到第一位。

✦ void swap(List<?> list, int i, int j)

这个方法用来交换 List 中第 i 位和第 j 位的元素。

✦ int frequency(Collection<?> c, Object o)

这个方法返回指定的元素在集合中出现了多少次。如果参数 o 为 null 的话,它同样会返回 null 元素的个数。

✦ List<T> nCopies(int n, T o)

这个方法返回包含 n 个相同元素的 List。注意 List 内容是不可变的。有人会问,那这个方法有什么用呢?你可以用它结合 List.addAll() 来填充一个可变的 List。比如:

List<String> list = new ArrayList<>();
...
list.addAll(Collections.nCopies(10, "A")); // 在 list 的末尾添加 10 个 "A"


发表评论

必填项已用*标注

+ 66 = 67