zoukankan      html  css  js  c++  java
  • 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两个方法也很好理解,一个是判断是否还有值,如果有值就获取这个值。

  • 相关阅读:
    SVG:中国地图
    网页编程工具:EditPlus
    js插件
    html: 仿制soundmanager2右上角面板
    代码:页面布局(含图片列表布局)
    写着玩: 图片 圆盘
    表格
    按钮
    插件:左侧下拉菜单
    颜色
  • 原文地址:https://www.cnblogs.com/liu-yi/p/14094483.html
Copyright © 2011-2022 走看看