案例: 反转数组元素.
需求:
1.定义int类型的数组, 存储数据: 11, 33, 22, 55, 44.
2.反转数组, 并打印反转后的结果.
*/
public class Demo05 {
public static void main(String[] args) {
//1. 定义数组, 记录要反转的元素.
int[] arr = {11, 33, 22, 55, 44};
//2. 反转数组.
/*
思路:
第1次交换: 11 和 44
第2次交换: 33 和 55
解决方案:
方案一:
交换次数: 数组的长度 / 2
交换双方:
arr[0] 和 arr[arr.length - 1 - 0]
arr[1] 和 arr[arr.length - 1 - 1]
arr[2] 和 arr[arr.length - 1 - 2]
arr[3] 和 arr[arr.length - 1 - 3]
......
arr[i] 和 arr[arr.length - 1 - i]
方案二:
1. 用start表示起始索引, 用end表示结束索引, 即: arr[start] 和 arr[end]交换
2. 如果start < end, 就一直交换.
*/
//方案一
/*for (int i = 0; i < arr.length / 2; i++) {
//arr[i] 和 arr[arr.length - 1 - i] 交换, 类似于: a 和 b交换.
*//*
int temp = a;
a = b;
b = temp;
*//*
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}*/
//方案二:
for (int start = 0, end = arr.length - 1; start < end; start++, end--) {
//arr[start] 和 arr[end] 交换
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
//3. 打印结果.
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
并发修改异常简介:
概述:
当使用普通迭代器(Iterator)遍历集合的同时, 又往集合中添加了元素, 就会报 ConcurrentModificationException(并发修改异常).
产生原因:
大白话:
普通迭代器(Iterator), 遍历集合, 又往集合中添加元素, 这只是并发修改异常出现的其中一种情况, 其它情况后续做项目你也会遇到.
不管什么原因出现的并发修改异常, 解决方案都是一样的.
专业版:
在ArrayList集合类的内部类 Itr类中, 有一个next()方法, 该方法是重写了 Iterator接口的next()方法,
该方法内部有一个int类型的变量, 记录的就是获取迭代器的时候, 集合中的元素个数, 如果当集合中实际元素
的个数大于这个值的时候, 就会报: 并发修改异常.
解决方案:
1. 通过 列表迭代器 解决, 注意: 添加元素的时候, 要使用 列表迭代器独有的 add()方法添加元素.
这种方式添加的元素, 是在当前元素的后边添加的.
2. 通过 普通 for 循环实现.
这种方式添加的元素, 是在集合的末尾添加的.
3. 通过 CopyOnWriteArrayList 集合实现.
这种方式添加的元素, 是在集合的末尾添加的.