集合
问题的引出
集合和数组类似,都是容器。为什么用集合?
数组的特点
- 数组定义完成并启动后,类型确定、长度固定。
- 不适合元素的个数和类型不确定的业务场景,更不适合做需要增删数据操作。
- 数组的功能也比较的单一,处理数据的能力并不是很强大。
集合的特点
- 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球。
- 集合非常适合元素个数不能确定,且需要做元素的增删操作的场景。
- 同时,集合提供的种类特别的丰富,功能也是非常强大的,开发中集合用的更多。
总结
通过集合需要学会什么
集合的体系特点
集合类体系结构
Collection单列集合,每个元素(数据)只包含一个值。
Map双列集合,每个元素包含两个值(键值对)。
Collection集合体系
Collection集合特点
List系列集合
添加的元素是有序、可重复、有索引。
ArrayList、LinekdList :有序、可重复、有索引。
Set系列集合
添加的元素是无序、不重复、无索引。
HashSet: 无序、不重复、无索引;LinkedHashSet: 有序、不重复、无索引。
TreeSet:按照大小默认升序排序、不重复、无索引。
泛型
集合都是泛型的形式,可以在编译阶段约束集合只能操作某种数据类型
如果集合中要存储基本类型的数据怎么办?
总结
代码演示
有序 ,可重复 , 有索引
// 有序 ,可重复 , 有索引
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);
结果演示
Collection集合常用API
Collection集合
Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。
Collection API
- 添加元素 , 添加成功返回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("-----------------------------------");
- 清空集合的元素
list.clear();
System.out.println(list);
- 判断集合是否为空 , 是空返回true , 反之
System.out.println(list.isEmpty());
- 获取集合的大小
System.out.println(list.size());
- 判断集合中是否包含某个元素
System.out.println(list.contains("java"));
System.out.println(list.contains("HTML"));
- 删除某个元素 :如果有多个重复元素默认删除前面的第一个
System.out.println(list);
list.remove("java");
System.out.println(list);
- 把集合转换成数组
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);
运行结果如下
Collection集合的遍历方式
方式一:迭代器
迭代器遍历概述
遍历就是一个一个的把容器中的元素访问一遍。
迭代器在Java中的代表是Iterator,迭代器是集合的专用的遍历方式。
Collection集合获取迭代器
Iterator中的常用方法
未使用迭代器之前
Collection<String> list = new ArrayList<>();
list.add("徐凤年");
list.add("陈平安");
list.add("石昊");
list.add("魏晋");
list.add("左右");
System.out.println(list);
使用迭代器之后(未使用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());
使用while循环后的迭代器
// 得到当前集合的迭代器对象
Iterator<String> iterator = list.iterator();
// 定义while循环
while (iterator.hasNext()) {
String res = iterator.next();
System.out.println(res);
迭代器执行流程
迭代器的默认位置
Iterator iterator():得到迭代器对象,默认指向当前集合的索引0
迭代器如果取元素越界会出现什么问题
会出现NoSuchElementException异常。
方式二:foreach/增强for循环
增强for循环
// 增强for循环
for (String s : list) {
System.out.println(s);
}
增强for循环:既可以遍历集合也可以遍历数组。
增强for修改变量
总结
方式三:lambda表达式
Lambda表达式遍历集合
得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
Collection结合Lambda遍历的API
Collection集合存储自定义类型的对象
案例
代码演示
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("----------------------------------------------------------");
}
分析
集合中存储的是元素的什么信息?
集合中存储的是元素对象的地址。
System.out.println(“评分:” + movie.getScore());
System.out.println(“演员:” + movie.getActor());
System.out.println();
System.out.println(“----------------------------------------------------------”);
}
## 分析
[外链图片转存中...(img-VL7cOluq-1667692409749)]
## 集合中存储的是元素的什么信息?
> **集合中存储的是元素对象的地址。**