java集合概览

java集合概览:

  咱们先经过一张图来了解java集合。html

 

 

   从上图能够看到,java集合主要分为两大类,分别是Collection和Map。上图只列举了经常使用的几个实现类,若是要看全部的实现类,能够查看JDK文档。java

Collection的全部子接口和实现类以下:设计模式

 

 

 

Map的全部子接口和实现类以下:学习

 

 

  能够看到集合的实现类很是很是的多,可是不用怕,咱们只须要学习经常使用的便可,好比第一张图中的就是必需要掌握的。还有些JUC包下的重要的同步实现类,图中没有画出来,后续会进行讲解。咱们先来看看几个接口的区别:spa

  • Collection 接口存储一组不惟一,无序的对象
  • List 接口存储一组不惟一,有序(插入顺序)的对象
  • Set 接口存储一组惟一,无序的对象
  • Map接口存储一组键值对象,提供key到value的映射 

迭代器:

  咱们在使用集合的过程当中,避免不了要对集合进行遍历,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

相关文章
相关标签/搜索