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

  • 相关阅读:
    Python学习札记(十五) 高级特性1 切片
    LeetCode Longest Substring Without Repeating Characters
    Python学习札记(十四) Function4 递归函数 & Hanoi Tower
    single number和变体
    tusen 刷题
    实验室网站
    leetcode 76. Minimum Window Substring
    leetcode 4. Median of Two Sorted Arrays
    leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions 、434. Number of Islands II(lintcode) 并查集 、178. Graph Valid Tree(lintcode)
    刷题注意事项
  • 原文地址:https://www.cnblogs.com/liu-yi/p/14094483.html
Copyright © 2011-2022 走看看