Java Collections Framework(JCF集合框架)

/ Java / 1 条评论 / 713浏览

注意:本文介绍的是 JDK 1.8 版本

集合框架介绍

Java 有多种方式保存对象(对象的引用)。比如数组,不仅可以存储对象,还可以存储基本类型。但是数组具有固定的尺寸,这一限制使得我们在使用数组前得先思考需要存储大小,但是我们通常在写程序时并不知道将需要多少对象。

Java 提供了一套完整的容器解决这个问题,其中的基本类型是 List,Set,Queue,Map。这些对象类型也称为 集合类型

与数组不同,在编程时,你可以使用任意数量的对象放置到容器中,并且不需要担心容器应该设置为多大。

开始

进入 JDK8 中的 Collection 源码首先看到

collection01.png

位置

集合类存放于 java.util 包中。

新特性

其次看到 Collection 中引入了 Java8 的 Predicate 函数式接口 ,Stream 和 StreamSupport 和流对象.

所以不难想到 Java8 中集合被用于 流 (Stream) 操作。

Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。

Stream API 借助于同样新出现的 Lambda表达式,极大的提高编程效率。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势 ; 可以很方便地写出高性能的并发程序。

例如:我们需要找出一组数中大于 3 的数,以前可能需要这样遍历 List 然后寻找。

   List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        Iterator<Integer> iterator = list.iterator();
        int countBigThan3 = 0;
        while (iterator.hasNext()) {
            Integer value = (Integer) iterator.next();
            if (value > 3)
                countBigThan3++;
        }
        System.out.println(countBigThan3);

现在我们这样做:

 List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        System.out.println(list.stream()
                .filter(value -> value > 3)
                .count());

确实 Java8 的集合类和原先有了较大的改变,关于 stream 操作在以后会写到,目前先介绍到这里。

容器

Java容器能够容纳任何类型的对象。

集合类存放的都是 对象的引用 ,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。

结构

collection01.png

集合类型主要有3种:set (集) 、list (列表)和 map (映射)

collection01.png

Map 接口没有继承自 Collection 接口,因为 Map 表示的是关联式容器而不是集合。但 Java 为我们提供了从Map 转换到 Collection 的方法,可以方便的将 Map 切换到集合视图。

迭代器(Iterator)介绍

collection01.png

Iterable是一个接口。

从源码中可以看出:

  1. T 为迭代器返回的元素的类型。

  2. 构造器返回一个迭代器,而不是类型的元素。

forEach 方法

collection01.png

阅读源码可以看出

forEach方法为每个元素执行给定的操作。直到所有元素都被处理或动作抛出。

例外: 除执行类另有规定外,操作按迭代顺序执行(如果是迭代顺序的话)

由动作引发的异常会传递到调用者。

----- 此处会抛出空指针异常(NullPointerException)

  1. testasd