拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Java 数组练习|原地交换 vs 逆序赋值,搞懂数组反转

前言数组反转是编程中常见的操作在Java中有多种实现方式。本文将详细介绍两种经典方法原地交换法找规律反转和逆序赋值法创建新数组并通过源码分析其实现原理和适用场景。方式一原地交换法找规律反转核心思想通过观察可以发现数组反转本质上就是对称位置元素互换第1个与最后1个交换第2个与倒数第2个交换第3个与倒数第3个交换规律总结原数组{11, 22, 33, 44, 55, 66}第1次交换arr[0] ↔ arr[5] → {66, 22, 33, 44, 55, 11}第2次交换arr[1] ↔ arr[4] → {66, 55, 33, 44, 22, 11}第3次交换arr[2] ↔ arr[3] → {66, 55, 44, 33, 22, 11}关键结论交换次数 arr.length / 2每次交换的对称下标arr[i]和arr[arr.length - 1 - i]奇数长度数组中间元素不需要交换循环执行length/2会自动跳过中间元素无需额外处理。源码实现publicclassArrayReverse{publicstaticvoidmain(String[]args){// 定义原数组int[]arr{11,22,33,44,55,66};// 原地交换实现反转inttemp0;intlenarr.length;for(inti0;ilen/2;i){// 保存右侧元素temparr[len-1-i];// 右侧赋值为左侧元素arr[len-1-i]arr[i];// 左侧赋值为保存的右侧元素arr[i]temp;}// 输出反转结果System.out.println(翻转后数组);for(inti0;iarr.length;i){System.out.print(arr[i]\t);}// 输出结果66 55 44 33 22 11}}特点分析✅优点空间效率高不需要额外创建数组节省内存时间复杂度O(n)只遍历数组一半元素❌缺点直接修改原数组原始数据会被破坏需要推导下标对称规律对初学者不够直观方式二逆序赋值法创建新数组核心思想开辟一块全新数组空间倒着遍历原数组把元素依次存入新数组最后将数组引用指向新数组。执行流程原数组arr {11, 22, 33, 44, 55, 66}新建数组arr2 new int[6]逆序遍历原数组i5, j0 → arr2[0] arr[5] 66i4, j1 → arr2[1] arr[4] 55i3, j2 → arr2[2] arr[3] 44i2, j3 → arr2[3] arr[2] 33i1, j4 → arr2[4] arr[1] 22i0, j5 → arr2[5] arr[0] 11最终arr2 {66, 55, 44, 33, 22, 11}arr arr2;让局部变量 arr 指向新数组源码实现publicclassArrayReverse02{publicstaticvoidmain(String[]args){// 定义原数组int[]arr{11,22,33,44,55,66};// 创建新数组长度与原数组相同int[]arr2newint[arr.length];// 逆序遍历顺次放入新数组// i控制原数组倒序j控制新数组正序for(intiarr.length-1,j0;i0;i--,j){arr2[j]arr[i];}// 将局部变量arr指向新数组arrarr2;// 输出反转结果System.out.println(arr 的元素情况);for(inti0;iarr.length;i){System.out.print(arr[i]\t);}// 输出结果66 55 44 33 22 11}}特点分析✅优点逻辑通俗易懂代码可读性高原始数组数据完整保留不会被修改❌缺点需要开辟同等大小新数组内存开销翻倍大数组场景内存压力大两种方式对比总结对比维度原地交换法逆序赋值法空间复杂度O(1) 常数级O(n) 线性级时间复杂度O(n)O(n)是否修改原数组修改原数组保留原数组代码可读性一般需要理解下标优秀逻辑直白适用场景内存紧张、不需要保留原始数据需要保留原数据优先可读性小结本文详细讲解了Java数组反转的两种经典实现方式原地交换法对称下标互换原地修改数组内存占用小适合内存敏感场景。逆序赋值法新建数组逆序拷贝元素逻辑简单原始数据不受破坏。搞懂数组反转不仅掌握数组遍历、元素交换还能加深对数组引用、内存分配、参数传递的理解。希望这篇笔记对你有帮助
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门