Java集合系列之Collection接口

Colection接口和Map接口一起构成了Java的集合框架的主干部分,是对于集合类型的数据操作的抽象。

Collection抽象数据类型

ADT
Collection (数据抽象类型名)

Data
数据集合为{a1,a2,a3.....,an},每个数据的数据类型都是DataType.

operations(仅定义逻辑方法,与JDK方法不保持一致)
   InitCollection(); 初始化创建集合
   AddElement(DataType d); 添加集合元素
   RemoveElement(DataType d); 删除集合中元素
   Clear(); 清空集合

Collection接口依赖Iterable接口:
Iterable接口
Iterator接口
-iterator() 返回一个迭代器 iterator

  • forEach(Consumer<? super T> action) 为集合内每个元素执行函数action

  • default Spliterator< T > spliterator() 返回一个Spliterator并行迭代器
    Iterator接口
    Iterator接口
    方法剖析

    • hasNext() 返回类型为boolean,仅当如果迭代器还有下一个元素,返回true
    • next() 返回类型为 ,返回迭代器的下一个元素
    • remove() default 方法 调用一次next()方法后可以调用一次,从迭代器删除返回的最后一个元素
    • forEachRemaining(Consumer<? super E> action) default 方法 Java8新方法,对迭代器中剩余的所有元素执行action

    Collection接口
    这里写图片描述

  • 方法剖析

    • add (E e) 向集合内添加指定元素
    • addAll(Collection<? extends E> c) addAll(int index, Collection<?extends E> c) 向集合内(指定位置 index)添加另一集合的全部元素
    • clear() 清空集合,可用于多次使用单个集合对象,节省资源
    • contains(Object o) 判断是否还有某个对象
    • containsAll(Collection<?> c) 判断是否含有集合c的所有元素
    • parallelStream() java8新特性,使用fork/join框架自动并行处理
    • remove(Object o) 移除集合中的一个元素
    • removeAll(Collection<> c) 移除集合含有的集合c中的所有元素
    • removeIf(Predicate<? super E> filter) 底层迭代调用Predicate接口的test方法
      Predicate函数式接口 主要用提供test()方法,该方法返回一个布尔变量
    • spliterator() 并行迭代器
    • stream() 返回集合的流资源,用于函数式运算
    • toArray() 转换成数组
    • toArray(T[] a) 将集合转换成对应对象类型的数组

spliterator(splitable iterator可分割迭代器)接口是Java8新增加的迭代器,为了并行遍历数据源中的元素而设计的迭代器,这个可以类比最早Java提供的顺序遍历迭代器Iterator,但一个是顺序遍历,一个是并行遍历

spliterator接口
并行迭代器接口,Java8新增的迭代器接口
Spliterator接口
boolean tryAdvance(Consumer<? super T> action) 该方法会处理每个元素,如果没有元素处理,则应该返回false,否则返回true

Spliterator trySplit() 将一个Spliterator分割成多个Spliterator。分割的Spliteratork可被用于每个子线程进行处理,从而达到并发处理的效果

default void forEachRemaining(T_CONS action) 该方法为接口默认实现方法,循环调用tryAdvance遍历集合内的所有元素

long estimateSize() 集合迭代后的大小

int characteristics() 枚举值,返回Spliterator具有的流特性,枚举为ORDERED | SIZED | SUBSIZED | NONNULL | IMMUTABLE |DISTINCT

default void forEachRemaining(Consumer<? super T> action) 对于集合内每个元素执行action函数

default Comparator<? super T> getComparator() 获取集合的比较器

Consumer接口

Consumer接口

Consumer接口期望使用void accept(T t)方法改变入参的值

void accept(T t) 对于入参t执行当前函数

default Consumer andThen(Consumer<? super T> after) 对入参执行当前函数后,继续执行after函数

    Consumer<String> d=(x) -> System.out.print(x.toLowerCase());
    d.andThen((i) ->                  System.out.println(i.toLowerCase())).accept("AbcD");

Predicate接口

Predicate接口

Predicate用于判断输入参数是否符合要求

Predicate被@FunctionalInterface注解,表示接口只能有一个抽象方法

boolean test(T t) 对于元素t执行当前函数
default Predicate and(Predicate<? super T> other) 判断other非空后,与当前函数做与逻辑判断
default Predicate negate() 对当前函数做非逻辑判断
default Predicate or(Predicate<? super T> other) 判断other非空后,与当期函数做非逻辑判断
static Predicate isEqual(Object targetRef) 判断数据targetRef是否和函数处理的数据equals

    Predicate<String> a=(s) -> s.length()>3;
    Predicate<String> b=(s)  -> s.length()>4;

    Predicate<String> c=Predicate.isEqual("abc");


    System.out.println(c.test("abc"));

    System.out.println(a.and(b).test("abcde"));

    System.out.println(a.or(b).test("abc"));

    System.out.println(a.negate().test("a"));

posted on 2018-11-21 10:58  ShoolyShooly  阅读(118)  评论(0编辑  收藏  举报

导航