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来操作集合元素,调用聚集方法

posted on 2017-06-07 17:53  zawjdbb  阅读(172)  评论(0编辑  收藏  举报

导航