JDK1.8之集合类< Collection>

JDK1.8之Collection

  • Collection的UML类图
  • CollectionMethods
    • default方法
  • Iterable接口

Collection的UML类图

JDK1.8之集合类< Collection>_第1张图片
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 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); };
    }

你可能感兴趣的:(Java)