简介
Collections 是Java 集合框架中的根类, 所有我们熟知的 Java 集合类例如: ArrayList, HashMap 等都是他的实现类, Collections 中包含了很多集合类中通用的方法, 学习该类对于深入理解 Java 集合的方法和底层逻辑有很大的帮助
接口方法
| 方法名 | 简介 |
|---|---|
size() | 返回集合中元素的数量 |
isEmpty() | 返回 true 如果集合中没有元素 |
contains() | 如果此集合包含指定元素,则返回 true |
toArray() | 返回一个包含此集合中所有元素的数组 |
add() | 往集合中添加一个元素, 返回添加结果 |
remove() | 移除集合中的一个指定元素, 如果集合被更改了, 则返回 true |
containsAll() | 如果此集合包含指定集合中的所有元素,则返回true |
addAll() | 将指定集合中的所有元素添加到此集合中 |
removeAll() | 删除此集合中也包含在指定集合中的所有元素 |
removeIf() | 删除此集合中满足给定条件的所有元素 |
retainAll() | 仅保留此集合中包含在指定集合中的元素 |
clear() | 从该集合中删除所有元素 |
stream() | 返回一个以该集合为源的 Stream 流 |
parallelStream() | 返回一个以该集合为源的 parallelStream 并行流 |
大部分接口方法的具体实现都在 collection 的实现类中完成, 所以在本文中不会提及, 会放到之后具体的实现类中再做讨论
removeIf
default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean removed = false;
final Iterator<E> each = iterator();
while (each.hasNext()) {
if (filter.test(each.next())) {
each.remove();
removed = true;
}
}
return removed;
}
这个方法是少数几个被 collection 实现的默认方法, 该方法主要是去删除集合中满足指定条件的元素, 常见的用法是:
// 创建一个动态数组
ArrayList<String> people = new ArrayList<>();
people.add("张三");
people.add("李四");
people.add("王五儿");
// 删除名称中带有 "张" 的元素
sites.removeIf(e -> e.contains("张"));;
// 删除集合中名字长度为 2 的人
sites.removeIf(p -> p.length() == 2);;
其实核心还是在于 lambda 表达式, 在上面的代码传参中, 可以分为箭头前面和后面两部分, 前面就是集合中每个元素你的命名, 可以是任何名字, 后面必须是一个可以返回 true / false 的布尔表达式, 这样该函数就会自动去移除所有满足你条件的元素了