• 数组反转 并发修改异常 ---有用


    案例: 反转数组元素.

    需求:
    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 集合实现.
    这种方式添加的元素, 是在集合的末尾添加的.

  • 相关阅读:
    成长之思考题
    HP LaserJet P2055dn 通过网络连接打印机用户指南
    【转载】大牛给计算机专业学生的7个建议
    CMake 复制文件方法
    Gitee Git bash VSCode操作简易说明
    Qwt 编译 配置 使用
    Clion+Cmake+Qt5+Qwt+msys2+MinGW在Windows下的安装配置使用教程
    基于Cmake+QT+VS的C++项目构建开发编译简明教程
    在WINDOWS中安装使用GSL(MinGW64+Sublime Text3 & Visual Studio)
    JavaScript学习(2)call&apply&bind&eval用法
  • 原文地址:https://www.cnblogs.com/shan13936/p/13853788.html
Copyright © 2020-2023  润新知