032——集合

集合

问题的引出

集合和数组类似,都是容器。为什么用集合?

img

数组的特点

img

  1. 数组定义完成并启动后,类型确定、长度固定。
  2. 不适合元素的个数和类型不确定的业务场景,更不适合做需要增删数据操作。
  3. 数组的功能也比较的单一,处理数据的能力并不是很强大。

集合的特点

img

  1. 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球。
  2. 集合非常适合元素个数不能确定,且需要做元素的增删操作的场景。
  3. 同时,集合提供的种类特别的丰富,功能也是非常强大的,开发中集合用的更多。

总结

img

通过集合需要学会什么

img

集合的体系特点

集合类体系结构

img

Collection单列集合,每个元素(数据)只包含一个值。
Map双列集合,每个元素包含两个值(键值对)。

img

Collection集合体系

img

Collection集合特点

List系列集合

添加的元素是有序、可重复、有索引。

ArrayList、LinekdList :有序、可重复、有索引。

Set系列集合

添加的元素是无序、不重复、无索引。

HashSet: 无序、不重复、无索引;LinkedHashSet: 有序、不重复、无索引。
TreeSet:按照大小默认升序排序、不重复、无索引。

泛型

集合都是泛型的形式,可以在编译阶段约束集合只能操作某种数据类型

img

img

如果集合中要存储基本类型的数据怎么办?

img

总结

img

代码演示

有序 ,可重复 , 有索引

// 有序 ,可重复 , 有索引
        Collection list = new ArrayList();
        list.add("java");
        list.add("html");
        list.add("javaWeb");
        list.add(20);
        list.add(false);
        System.out.println(list);

无序 , 不重复 , 无索引

Collection list1 = new HashSet();
        list1.add("java");
        list1.add("html");
        list1.add("javaWeb");
        list1.add(20);
        list1.add(false);
        System.out.println(list1);

集合和泛型不支持基本数据类型 , 只能支持引用数据类型

Collection<Integer> collection = new ArrayList<>();
        collection.add(20);
        collection.add(21);
        collection.add(22);
        System.out.println(collection);

结果演示

img

Collection集合常用API

Collection集合

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

Collection API

img

  1. 添加元素 , 添加成功返回true
Collection<String> list = new ArrayList<>();
       // 1. 添加元素 , 添加成功返回true
       list.add("java");
       list.add("javaWeb");
       list.add("SSM");
       list.add("SpringBoot");
       list.add("SpringCold");
       list.add("java");
       System.out.println(list);
       System.out.println("-----------------------------------");

img

  1. 清空集合的元素
list.clear();
       System.out.println(list);
  1. 判断集合是否为空 , 是空返回true , 反之
System.out.println(list.isEmpty());
  1. 获取集合的大小
System.out.println(list.size());
  1. 判断集合中是否包含某个元素
System.out.println(list.contains("java"));
      System.out.println(list.contains("HTML"));
  1. 删除某个元素 :如果有多个重复元素默认删除前面的第一个
 System.out.println(list);
        list.remove("java");
        System.out.println(list);
  1. 把集合转换成数组
Object[] arrs = list.toArray();
        System.out.println("数组" + Arrays.toString(arrs));

拓展

System.out.println("---------------------拓展-------------------------");

        Collection<Integer> list_1 = new ArrayList<>();
        list_1.add(12);
        list_1.add(13);
        list_1.add(14);
        System.out.println(list_1);

        Collection<Integer> list_2 = new ArrayList<>();
        list_2.addAll(list_1);
        System.out.println(list_2);

运行结果如下

img

Collection集合的遍历方式

方式一:迭代器

迭代器遍历概述

遍历就是一个一个的把容器中的元素访问一遍。
迭代器在Java中的代表是Iterator,迭代器是集合的专用的遍历方式。

Collection集合获取迭代器

img

Iterator中的常用方法

img

未使用迭代器之前

        Collection<String> list = new ArrayList<>();
        list.add("徐凤年");
        list.add("陈平安");
        list.add("石昊");
        list.add("魏晋");
        list.add("左右");
        System.out.println(list);

img

使用迭代器之后(未使用while循环

// 得到当前集合的迭代器对象
        Iterator<String> iterator = list.iterator();
        String next = iterator.next();
        System.out.println(next);
        System.out.println(iterator.next());
        System.out.println(iterator.next());
        System.out.println(iterator.next());
        System.out.println(iterator.next());

img

使用while循环后的迭代器

// 得到当前集合的迭代器对象
        Iterator<String> iterator = list.iterator();
        // 定义while循环
        while (iterator.hasNext()) {
            String res = iterator.next();
            System.out.println(res);

img

迭代器执行流程

img

迭代器的默认位置

Iterator iterator():得到迭代器对象,默认指向当前集合的索引0

迭代器如果取元素越界会出现什么问题

会出现NoSuchElementException异常。

img

方式二:foreach/增强for循环

增强for循环

// 增强for循环
        for (String s : list) {
            System.out.println(s);
        }

img

增强for循环:既可以遍历集合也可以遍历数组。

img

增强for修改变量

img

总结

img

方式三:lambda表达式

Lambda表达式遍历集合

得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

Collection结合Lambda遍历的API

img

Collection集合存储自定义类型的对象

案例

img

代码演示

Collection<Movie> movies = new ArrayList<>();
        movies.add(new Movie("《雪中悍刀行》" , 9.5 , "徐凤年 , 徐晓 , 温华"));
        movies.add(new Movie("《剑来》" , 9.6 , "陈平安 , 宁姚 , 左右"));

        for (Movie movie : movies) {
            System.out.println("片名:" + movie.getName());
            System.out.println("评分:" + movie.getScore());
            System.out.println("演员:" + movie.getActor());
            System.out.println();
            System.out.println("----------------------------------------------------------");
        }

分析

img

集合中存储的是元素的什么信息?

集合中存储的是元素对象的地址。
System.out.println(“评分:” + movie.getScore());
System.out.println(“演员:” + movie.getActor());
System.out.println();
System.out.println(“----------------------------------------------------------”);
}


## 分析

[外链图片转存中...(img-VL7cOluq-1667692409749)]


## 集合中存储的是元素的什么信息?

> **集合中存储的是元素对象的地址。**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值