前言
数组基本概念复习
一、数组拷贝
案例演示:
将 int[] arr1 = {10,20,30}; 拷贝到 arr2 数组, 要求数据空间是独立的。
publicclassArrayCopy { publicstaticvoidmain(String[] args) { int[] arr1= {10, 20, 30}; // 创建一个新的数组 arr2 , 开辟新的数据空间// 大小 和arr1 一样大int[] arr2=newint[arr1.length]; //遍历 arr1 ,把每个元素拷贝到对应的位置for(inti=0; i<arr1.length; i++) { arr2[i] =arr1[i]; } arr2[0] =100; // 修改 arr2 不会对 arr1 造成影响System.out.print("arr1数组的值为:"); for(inti=0; i<arr1.length; i++) { System.out.print(arr1[i] +" "); } System.out.println( ); System.out.print("arr2数组的值为:"); for(inti=0; i<arr1.length; i++) { System.out.print(arr2[i] +" "); } } }
可以看出 arr2 的改变没有影响到 arr1,这就是数组的拷贝,会开创独立的数据空间,不会互相影响。
二、数组反转
案例演示:
(1)方法一
把数组的元素内容反转。如 arr = {11,22,33,44,55,66} 反转为 arr = {66, 55,44,33,22,11}
publicclassArrayReverse { publicstaticvoidmain(String[] args) { int[] arr= {11, 22, 33, 44, 55, 66}; for( inti=0; i<arr.length/2; i++) { inttemp=arr[arr.length-1-i]; arr[arr.length-1-i] =arr[i]; arr[i] =temp; } for( inti=0; i<arr.length ; i++) { System.out.print(arr[i] +" "); } } }
分析:
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}
4)一共要交换三次,所以总共循环次数应为 arr.length / 2 次
5)每次交换时,对应的下标 是 arr[i] 和 arr[arr.length - 1 - i]
(2)方法二
publicclassArrayReverse02 { publicstaticvoidmain(String[] args) { int[] arr= {11, 22, 33, 44, 55, 66}; int[] arr2=newint[arr.length]; for( inti=arr.length-1 , j=0; i>=0 ; i-- , j++) { arr2[j] =arr[i]; } arr=arr2; //当 arr 指向 arr2 数据空间,此时 arr 原来的数据空间就没有for( inti=0 ; i<arr.length ; i++) { System.out.print(arr[i] +" "); } } }
分析:
1)先创建一个新的数组 arr2, 大小为 arr.length
2)逆序遍历 arr,将每个元素拷贝到 arr2的元素中
3) arr 指向 arr2 数据空间,此时 arr 原来的数据空间就没有了,会被当做垃圾销毁