zoukankan      html  css  js  c++  java
  • 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还是有升级的趋势的,所以让迭代器与集合本身联系到一起

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

  • 相关阅读:
    Java进阶之并发初探
    Java进阶之HashMap剖析
    Java进阶之反射
    Linux常用命令
    海量数据处理算法与面试题
    一些刷题时总结的重要知识点
    一些Java刷题时的小知识点
    九章算法知识点与题目总结(不定时更新...)
    c++设计模式之状态模式
    c++设计模式之抽象工厂模式
  • 原文地址:https://www.cnblogs.com/JQ04/p/15092906.html
Copyright © 2011-2022 走看看