• 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"));
  • 相关阅读:
    mysql优化
    查询优化
    MySql服务器逻辑架构
    存储过程和存储函数区别
    mysql表设计原则
    mysql事务
    操作系统内存管理
    mysql索引介绍
    InnoDB与Myisam的区别
    【SVN】关于钩子的一些使用
  • 原文地址:https://www.cnblogs.com/Simon-cat/p/9993727.html
Copyright © 2020-2023  润新知