java集合概览

java集合概览:

  我们先通过一张图来了解java集合。

 

 

   从上图可以看到,java集合主要分为两大类,分别是Collection和Map。上图只列举了常用的几个实现类,如果要看所有的实现类,可以查看JDK文档。

Collection的所有子接口和实现类如下:

 

 

 

Map的所有子接口和实现类如下:

 

 

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

  • 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的类的继承关系:

 

 正如我们上面说的一样,它最终实现了Iterable接口,我们来看Iterable的源码:

 

 我们图中圈了一个方法iterator,这就意味着它所有的实现类都需要实现这个方法,所以我们在代码里面写的Iterator<Integer> iterator = list.iterator();这里调用的就是ArrayList实现的这个方法,代码如下:

 

   所以迭代器的实现,也可以说迭代器模式其实就是多态的一个典型的应用,十分简单,也很好理解。至于Iterator接口中的两个方法hasNext和next两个方法也很好理解,一个是判断是否还有值,如果有值就获取这个值。

 

posted @ 2020-12-06 21:36  负重前行的小牛  阅读(66)  评论(0编辑  收藏  举报