foreach的概述(也叫增强for循环)```java // foreach格式
for (元素类型 变量名: 数组或集合对象) { // 每次循环都会遍历出一个元素, 保存到变量名中 }
int[] arr = {1,2,3}; for (int i : arr) { System.out.println(i); } ```
- 注意:
- 增强for循环中不能修改集合(改变集合长度), 会发生并发修改异常
- 原因: 因为增强for循环内部使用的是迭代器进行迭代
增强for的优缺点:
- 优点: 简单快捷的拿到每一个元素
- 缺点:
- 循环过程中不能修改集合
- 不能像普通for循环那样使用索引
常见数据结构: 数组- 数组的特点:
- 长度一旦确定则不可改变
- 元素有整数索引
- 只能存储同一类型的元素
- 既可以存储基本数据类型, 也可存储引用数据类型
- 数组的增删改查:
- 增加/插入元素:
- 创建一个新数组, 长度为原数组长度+1
- 遍历原数组, 将原数组的元素复制到新数组的相同索引位置, 直到遇到要增加元素的索引位置
- 将要增加的元素值赋值到索引位置
- 继续复制剩余元素
- 删除元素:
- 创建一个新数组, 长度为原数组长度-1
- 遍历原数组, 将原数组的元素复制到新数组的相同索引位置, 直到遇到要删除元素的索引位置
- 跳过要删除的元素, 继续将剩余元素复制到后续索引位置
- 修改元素: arr[0] = 10;
- 获取元素: int i = arr[0];
- 通过以上增删改查的操作, 总结出数组的特点:
List的特点和特有功能List接口
- 继承自Collection接口. 在java.util包下
- 特点
- 元素有序(存入和取出的顺序一样)
- 有整数的索引
- 元素可以重复
- 特有功能
- void add(int index, E element): 添加元素
- E remove(int index): 删除元素
- E set(int index, E element): 修改元素
- E get(int index): 获取元素
Set体系的特点- Set接口:
- 继承自Collection接口
- 特点
- 元素无序(存入和取出的顺序不一致)
- 元素不能重复(元素唯一)
- 没有索引
- 注意:
- 无序: 指的是存入的顺序和取出的顺序不一样, 而不是说每次取出来是随机顺序, 存入后每次取出来的顺序都一样, 但和存入的顺序不一样
- 直接打印和获取元素都属于取出, 所以不要把打印当成是HashSet内部存储的样子
HashSet存储自定义对象并遍历HashSet类: 是Set接口的实现类
- 成员方法
- boolean add(E e): 添加成功true, 添加失败(重复了)返回false
HashSet存储自定义对象并遍历HashSet类: 是Set接口的实现类
- 成员方法
- boolean add(E e): 添加成功true, 添加失败(重复了)返回false
Map接口的概述- Map<K, V>接口
- 是双列集合的顶层, 和Collection属于同级
- 特点
- 存储方式是key-value(键值对)方式, 即一个键对应一个值
- 一个键只能映射一个值
- 键不能重复, 值可以重复
- 键是无序的
- Map和Collection的区别
- Map是双列集合, 用于处理有对应关系的数据,键不能重复且无序
- Collection是单列集合, 有不同的子体系, 有的允许重复且有序, 有的不允许重复且无序