Collection

Collection

为什么需要Collection

  1. Java是面向对象的语言,需要处理多个对象
  2. 既然处理多个对象,就要将它们存储起来
  3. 存储对象,就会想到容器(集合)(Conllection)
  4. 想到容器,常用的容器其实是有的,那就是数组,但是长度不可变!
  5. 所以有了集合

此处描述

Q:为什么要提出Java集合的概念(诸如此类的问题)

A:因为Java是一门面向对象的语言,就要频繁操作多个对象,所以就要将对象存储起来,虽然有数组这种容器了,但是它长度不可变,用起来不方便,所以出现了集合

数组和集合的区别

  1. 长度的区别

    • 数组的长度不可变
    • 集合的长度可变
  2. 元素类型的区别

    • 数组可存储基本的数据类型、引用数据类型

    • 集合只可以存储引用数据类型,如果存储基本类型,会自动装箱成Integer

      image-20210720150304322

Conllection的由来与功能

  1. Conllection的由来

    1. 集合可以存储多个元素,但是这些元素我们都有不同的需求

      • 多个元素不可以相同
      • 能够按照某种规则进行排序
      • ……………………等等
    2. 对不同的需要,Java提供了不同的集合类,多个集合类的数据结构不同,但并不关心数据结构,只关心能够存取,满足需要即可

    3. 最终,将集合的所有共性抽取成一个继承体系,最大的父级就是 Conllection

      image-20210720152310539

    4. 继承体系就是

      image-20210720153333326

    5. Conllection的基础功能

      1. 添加

        • Boolean add(Object obj); // 添加一个元素
          
        • Boolean addAll(Conllection c); //添加一个集合的元素
          
      2. 删除

        • void clear(); // 移除所有的元素
          
        • Boolean remove(Object); //移除一个元素
          
        • Boolean removeAll(Connection c);
          // 移除一个集合的元素,包含于c的元素都将被移除,移除>=1即true
          
      3. 判断

        • Boolean contains(Object o); // 判断一个元素是否包含于集合
          
        • Boolean containsAll(Collection c);// 判断一个集合是否包含另一个集合,只有全部元素都在才叫包含
          
        • Boolean isEmpty();// 判断集合是否为空
          
        • Iterator<E> iteator(); // 迭代器
          
        • int size(); // 元素的个数
          
        • Boolean retainAll(Collection c);// 交集结果存放到A中
          
          		Collection A = new ArrayList();
                  A.add("a");
                  A.add("b");
                  A.add("c");
                  A.add("d");
                  System.out.println("集合A");
                  for (Object o : A) {
                      System.out.println(o);
                  }
                  Collection B = new ArrayList();
                  B.add("c");
                  B.add("d");
                  B.add("e");
                  B.add("f");
                  System.out.println("集合B");
                  for (Object o : B) {
                      System.out.println(o);
                  }
                  boolean b = A.retainAll(B);
                  if (b) {
                      System.out.println("集合A交B");
                      for (Object o : A) {
                          System.out.println(o);
                      }
                  }
          

    迭代器(Iterator)

    1. 概念

      1. 是集合遍历的一种方式
      2. 依赖于集合而存在的?Collection extends Iterable -> 里面存在一个迭代器对象
    2. 用法实现

      		Collection A = new ArrayList();
              A.add("a");
              A.add("b");
              A.add("c");
              A.add("d");
              System.out.println("集合A的迭代器的遍历方式");
              // 拿到 集合 A 的迭代器对象
              Iterator iterator = A.iterator();
              while (iterator.hasNext()) {
                  Object next = iterator.next();
                  System.out.println(next.toString());
              }
      
    3. 步骤总结

      1. 根据集合获取迭代器对象

        Iterator iterator = A.iterator();
        
      2. 通过迭代器的hasNext()方法来判断,集合是否有元素(一般情况下,在while循环里使用)

      3. 通过next()获取元素并且将"指针"移动到下一个位置

    4. 面试问题

      1. 迭代器为什么定义成接口,而不是类

          1. 集合的数据结构五花八门List Set LinkedList ……

            如果定义成类,我们自己new一个迭代器对象调用其方法来遍历

            但数据结构不同,并且集合java还是有升级的趋势的,所以让迭代器与集合本身联系到一起

            而不是很麻烦的去写一些重载,这也是面向对象程序设计的抽象手段

原文地址:https://www.cnblogs.com/JQ04/p/15092906.html