JDK1.8之Collection
Collection的UML类图
Collection接口是java集合框架的根接口,它继承了Iterable接口,Iterable能够提供元素遍历的功能。
CollectionMethods
方法 | 注释 |
---|---|
int size(); | 返回集合的元素数量 |
boolean isEmpty(); | 判断是否为空 |
boolean contains(Object o); | 判断是否包含给定的元素 |
Iterator iterator(); | 返回此集合元素的迭代器 |
Object[] toArray(); | 返回一个包含集合所有元素的数组 |
T[] toArray(T[] a); | 返回包含集合所有元素的数组,返回数组的运行时类型是指定数组 |
boolean add(E e); | 确保这个集合包含指定的元素(可选操作),调用后集合发生改变返回true |
boolean remove(Object o); | 删除指定元素的单个实例,如果存在(可选操作) |
boolean containsAll(Collection<?> c); | 判断是否包含指定集合的所有元素 |
boolean addAll(Collection<? extends E> c); | 添加指定集合的所有元素(可选操作),调用后集合发生改变返回true |
boolean removeAll(Collection<?> c); | 移除所有包含在指定集合的元素 |
boolean retainAll(Collection<?> c); | 只保留在这个集合的元素包含在指定的集合(可选操作)。 |
void clear(); | 移除所有元素 |
boolean equals(Object o); | 比较 |
int hashCode(); | 返回hashcode |
default方法
JDK1.8之后新加入的default关键字,可以让接口的方法拥有方法体,而实现类不需要强制实现。
删除满足指定谓词的元素集合,即判断输入的对象是否符合某个条件。应该是使用lambda表达式。
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;
}
List<String> list = new ArrayList<String>();
list.add("1");
list.add("12");
list.add("21");
list.add("212");
list.add("3");
list.removeIf(s->s.contains("1"));
System.out.println(list.toString());//[3]
Spliterator是JDK1.8新增的一个可分割迭代器,集合框架中的数据结构都默认实现了spliterator,大大增强了并行处理的能力。
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, 0);
}
@Override
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
Iterable接口
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0)
顺便贴一下Consumer的源码,Iterable新特性和新增的函数式接口不太了解,欢迎交流,希望大佬指点一下。
/**
* Performs this operation on the given argument.
* 对给定的参数执行这个操作。
* @param t the input argument
*/
void accept(T t);
/**
* 返回一个组合的Consumer,它按顺序执行此操作,然后执行{@code after}操作。
* 如果执行操作将抛出一个异常,这是传递给调用者的组合操作。
* 如果执行该操作将抛出一个异常,after操作将不能进行。
*/
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}