1-集合介绍

1-集合介绍

介绍汇总:

  1. 为啥要使用集合
  2. 集合的框架体系
  3. Collection方法

1-为啥要使用集合

  1. 之前保存多个数据使用的是数组,那么数组有不足的地方,如下
    1. 长度开始时必须指定,而且一旦指定,不能更改
    2. 保存的必须为同一类型的元素(可以使用多态,保存多种类型数据)
    3. 数组进行扩容比较麻烦,添加或删除元素比较麻烦
  2. 那么集合可以带来怎样的好处呢
    1. 可以动态保存任意多个对象,使用比较方便(有自动扩容机制)
    2. 提供了一系列方便的操作对象的方法:add、remove、set、get等
    3. 集合添加或删除新元素比较容易

2-集合的框架体系

  1. Java的集合类主要分为两大类

    1. 单列集合

    从图中可以得出,Collection 接口有两个重要的子接口 List、Set ,其实现的子类都是单列集合,存放的元素都是一个,而且 List 是有序的,Set 是无序的。

    1. 双列集合

    从图中可以得出,Map 接口的实现子类都是双列集合,存放的元素是两个,为 K-V。

3-Collection方法

  1. Collection 接口常用方法
        // 创建一个类型为数组列表的列表对象
        List list = new ArrayList();

        // 添加单个元素
        list.add("吴彦祖");
        list.add("彭于晏");
        list.add("杨洋");
        list.add(89586);

        System.out.println("====列表中的元素有" + list + "====");

        // 删除指定元素
        list.remove("吴彦祖");

        System.out.println("====列表中的元素有" + list + "====");

        // 查找某个元素是否被存在
        boolean result = list.contains("吴彦祖");
        if (result) {
            System.out.println("====目标元素存在====");
        } else {
            System.out.println("====目标元素不存在====");
        }

        // 获取元素个数
        System.out.println("====列表中元素个数为" + list.size());

        // 判断列表是否为空
        if (list.isEmpty()) {
            System.out.println("====列表为空====");
        } else {
            System.out.println("====列表不为空====");
        }

        // 清空列表中的数据元素
        list.clear();

        if (list.isEmpty()) {
            System.out.println("====列表为空====");
        } else {
            System.out.println("====列表不为空====");
        }

        // 列表中添加多个元素
        ArrayList arrayList = new ArrayList();
        arrayList.add("水浒传");
        arrayList.add("三国演义");
        arrayList.add("红楼梦");

        list.addAll(arrayList);

        System.out.println("====列表中的元素有" + list + "====");

        // 查找多个元素是否都存在
        list.add("西游记");

        boolean containsedAll = list.containsAll(arrayList);

        if (containsedAll) {
            System.out.println("====目标元素存在====");
        } else {
            System.out.println("====目标元素不存在====");
        }

        // 删除多个元素
        arrayList.remove("红楼梦");

        list.removeAll(arrayList);

        System.out.println("====列表中的元素有" + list + "====");
  1. Collection 接口遍历元素

    1. 方式1:使用 Iterator(迭代器)

      1. Iterator 基本介绍

      1. Iterator 对象称为迭代器,主要用于遍历 Collection 集合中的元素。
      2. 所有实现了 Collection 接口的集合类有一个 iterator 方法,该方法返回一个实现了 Iterator 接口的对象,即可以返回一个迭代器。
      3. Iterator 的所有方法

      1. 迭代器的执行原理

      迭代器执行大致过程为:通过 hasNext 方法判断是否还有下一个元素,有的话则调用 next 方法,如上图所示,会把指针下移,然后将指针下移以后所指的集合位置上的元素返回。一般会搭配 while 函数来完成该遍历过程。

      注:在调用 next 方法前必须调用 hasNext 方法进行判断,若不调用,则下一条记录无效,直到 next 方法抛出 NoSuchElementException 异常。

      1. Iterator 仅用于遍历集合,其本身并不存放对象。
      2. 实践练习
      Collection collection = new ArrayList();
      
              collection.add(new Book("三国演义","罗贯中",10.1)) ;
              collection.add(new Book("小李飞刀","古龙",5.1)) ;
              collection.add(new Book("红楼梦","曹雪芹",34.6)) ;
      
              // 获取一个迭代器
              Iterator iterator = collection.iterator();
      
              System.out.println("<<<<==============>>>>");
      
              // 迭代器遍历集合
              while (iterator.hasNext()) {
                  Object next =  iterator.next();
                  System.out.println("====迭代元素为" + next + "====");
              }
      
              // 迭代器遍历到集合最后一个元素时,继续调用 next() 方法,会抛出 NoSuchElementException 异常
              // 要想继续遍历,重新获取一个新的迭代器
              // 因为当前是数组列表,所以迭代器无法返回最初位置继续遍历,只能重新获取一个新的迭代器
              iterator = collection.iterator() ;
      
              System.out.println("<<<<==============>>>>");
      
              // 迭代器遍历集合
              while (iterator.hasNext()) {
                  Object next =  iterator.next();
                  System.out.println("====迭代元素为" + next + "====");
              }
      
    2. 方式2:增强 for 循环

      1. 基本语法
      for ( 元素类型 元素名 : 集合名或数组名 ) {
          访问元素
      }
      
      1. 特点:增强 for 循环就是简化版的 iterator ,本质一样,只能用于遍历集合或数组
      2. 实践练习
      Collection collection = new ArrayList();
      
              collection.add(new Book("三国演义","罗贯中",10.1)) ;
              collection.add(new Book("小李飞刀","古龙",5.1)) ;
              collection.add(new Book("红楼梦","曹雪芹",34.6)) ;
      
              // 获取一个迭代器
              Iterator iterator = collection.iterator();
      
              System.out.println("<<<<==============>>>>");
      
              // 迭代器遍历集合
              while (iterator.hasNext()) {
                  Object next =  iterator.next();
                  System.out.println("====迭代元素为" + next + "====");
              }
      
              // 迭代器遍历到集合最后一个元素时,继续调用 next() 方法,会抛出 NoSuchElementException 异常
              // 要想继续遍历,重新获取一个新的迭代器
              // 因为当前是数组列表,所以迭代器无法返回最初位置继续遍历,只能重新获取一个新的迭代器
              iterator = collection.iterator() ;
      
              System.out.println("<<<<==============>>>>");
      
              // 迭代器遍历集合
              while (iterator.hasNext()) {
                  Object next =  iterator.next();
                  System.out.println("====迭代元素为" + next + "====");
              }
      
              System.out.println("<<<<==============>>>>");
      
              // 增强 for 循环代替迭代器
              // 增强 for 循环底层仍然是迭代器
              // 通过断点,可以发现增强 for 循环会先调用生成迭代器的方法,然后调用迭代器的 hasnext 方法,在调用迭代器的 next 方法
              // 增强 for 循环可以理解为简化版的迭代器遍历
              for (Object object : collection) {
                  System.out.println("====增强 for 循环元素为" + object + "====");
              }
      

热门相关:觉醒后,我成了霸总白月光   我的抖音太无敌   来自异世界的诺诺   重生嫡女谋天下   大唐第一世家