• java集合 Collection,Set,List,Map


    大致分为Set,List,Queue,Map四种体系

    Set代表无序不可重复的集合,通过元素本身访问

    List代表有序可重复的集合,通过元素索引访问

    Map代表有映射关系的集合,通过key访问

    Queue代表一种队列集合的实现

    Collection接口是List,Set,Queue的父接口,定义了如下操作集合方法:add,addAll,clear,contains,containsAll,isEmpty,iterator,remove,removeAll,retainAll,insize,toArray

    所有实现Collection的类都重写了toString方法,可以一次性输出集合所有元素

    Iterable是Collection接口的父接口,java为Iterable提供了forEach默认方法,参数是函数式接口(只包含一个方法的接口)

      Collection books = new HashSet();

      books.add("a");books.add("b");

      books.forEach(obj->System.out.println("迭代元素"+obj));

    Iterator接口也是java集合框架成员,不同的是他主要用于便利Collection集合中的元素,Iterator对象也被成为迭代器,有四个方法:hasNext,next,remove,forEachRemaining

      Iterator i = books.iterator;if(i.hasNext()){...}

      Iterator对象的创建依赖一个被迭代的集合,遍历集合是传值,不会修改原集合,采用快速失败机制(fail-fast),一旦发生修改,即引发ConcurrentModificationException异常

    forEach遍历集合:for(Object obj : books){obj....},集合也不能改变,同样的异常

    java8--Predicate操作集合:java8为集合新增一个removeIf(Predicate filter)方法,该方法会批量删除符合filter条件的所有元素,需要一个Predicate(谓词)对象作为参数,Predicate也是函数

      式接口,可以使用Lumbda表达式作为参数:books.removeIf(el -> ((String)el).length<10) 

    java8--Stream,IntStream,LongStream,DoubleStream等流式api:Stream是通用的流接口,其他为代表对应元素的流,每个流式api提供对应的Builder,例如Stream.Builder,IntStream.Builder用

      来创建对应的流。

      使用步奏:

        使用Stream或者xxxStream的builder()类方法创建该Stream对应的Builder

        重复调用Builder的add()方法向流中添加多个元素 

        调用Builder的build()方法获取对应的Stream

        调用Stream的聚集方法

      IntStream is = IntStream.builder().add(20).add(20).build(); print(is.max().getAsInt());

      Stream的聚集方法每次只能执行一个,多个不行

      Stream的聚集方法分为:

        intermediate中间态:中间方法操作允许流保持打开状态,并允许直接调用后续方法,map()就是中间方法,中间方法返回值是另外一个流

        terminal末端态:末端方法是对流的最终操作,会”消耗掉“这个流,这个流不可再用,sum(),count(),average()是末端方法

      Stream聚集方法两个特征:

        有状态的方法:这种方法会给流增加一些属性,比如元素的唯一性,元素的最大数量,有状态的方法需要更大的性能开销

        短路方法:短路方法可以尽早结束对流的操作,不必检查所有元素

      常用的中间方法:

        filter(Predicate predicate):过滤所有不符合predicate的元素

        mapToxxx(ToxxxFunction mapper):使用ToxxxFunction对流中元素执行一对一的转换,该方法返回的新流包含转换生成的所有元素

        distinct():排序流中所有重复元素,判断标准是equals()返回true,是有状态方法

        sorted():保证流中元素在后续访问中是有序状态,是有状态方法

        limit(long maxSize):保证后续访问中元素最大访问个数,是有状态的,短路的方法

      常用末端方法:

        forEach(Consumer action):遍历流中所有元素,并对每个元素执行action

        toArray():将流中所有元素转换为一个数组

        reduce():该方法有三个重载版本,都用于通过某种操作来合并流中的元素

        min():返回流中所有元素最小值

        max():最大值

        count():所有元素数量

        anyMatch(Predicate predicate):判断是否至少包含一个元素符合predicate

        allMatch(Predicate predicate):判断所有

        noneMatch(Predicate predicate):是否都不符合

        findFirst():返回流第一个元素

        findAny():返回流中任意一个元素。

      java8允许使用流式API来操作集合,Collection 接口提供了一个steam()默认方法,返回该集合对应的流,接下来可以通过流式API来操作集合元素,调用聚集方法

  • 相关阅读:
    动态规划精讲(一)LC最长公共子序列
    0-1背包
    折线分割平面
    母牛的故事
    数塔
    70. 爬楼梯
    文件修改的两种方式
    文件处理练习
    文件处理
    购物车理解
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/6938798.html
Copyright © 2020-2023  润新知