咱们先经过一张图来了解java集合。html
从上图能够看到,java集合主要分为两大类,分别是Collection和Map。上图只列举了经常使用的几个实现类,若是要看全部的实现类,能够查看JDK文档。java
Collection的全部子接口和实现类以下:设计模式
Map的全部子接口和实现类以下:学习
能够看到集合的实现类很是很是的多,可是不用怕,咱们只须要学习经常使用的便可,好比第一张图中的就是必需要掌握的。还有些JUC包下的重要的同步实现类,图中没有画出来,后续会进行讲解。咱们先来看看几个接口的区别:spa
咱们在使用集合的过程当中,避免不了要对集合进行遍历,javaAPI提供了一个公共的遍历接口Iterable,咱们来看下它是怎么实现遍历的。咱们以ArrayList实现类为例子,看以下代码:设计
package test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * @ClassName CollectionTest * @description: * @author:liuyi * @Date:2020/12/6 21:03 */ public class CollectionTest { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }
能够看到用迭代器方式遍历一个集合十分的简单,那它究竟是怎么作到了呢。其实它的实现属于一种设计模式,迭代器模式,能够参考我这篇文章https://www.cnblogs.com/liu-yi/p/13997431.html。在这篇文章里面,我自定义实现了一个迭代器,和jdk自带的几乎如出一辙,咱们经过源码来分析它的实现过程。先来看ArrayList的类的继承关系:code
正如咱们上面说的同样,它最终实现了Iterable接口,咱们来看Iterable的源码:htm
咱们图中圈了一个方法iterator,这就意味着它全部的实现类都须要实现这个方法,因此咱们在代码里面写的Iterator<Integer> iterator = list.iterator();这里调用的就是ArrayList实现的这个方法,代码以下:对象
因此迭代器的实现,也能够说迭代器模式其实就是多态的一个典型的应用,十分简单,也很好理解。至于Iterator接口中的两个方法hasNext和next两个方法也很好理解,一个是判断是否还有值,若是有值就获取这个值。blog