数组的延伸(浅复制、深复制)

来源:互联网 发布:量化交易 不会编程 编辑:程序博客网 时间:2024/06/05 18:02

数组的复制:
       浅复制:数组的名称(引用数据类型)指向的是相同的堆空间。
       深复制:重新开辟新的内存空间去存储数组的数据。


package lesson_arr;

import java.util.Arrays;
public class Demo {
public static void main(String[] args) {

//浅复制
int[] arr1 = {12,34,56,78};
int[] arr2 = arr1;
System.out.println("没修改数值之前的arr1:");
print(arr1);
//print(arr2);
System.out.println("修改数值之后的arr1:");
arr2[1] = 100;
print(arr1);

//深复制一
int[] arr3 = arr1.clone();
System.out.println("arr3:");
print(arr3);
arr3[1] = 50;
print(arr1);
System.out.println(arr1+"==="+arr3);

//深复制二
int len = arr1.length;
int[] arr4 = new int[len];
for (int i = 0; i < arr1.length; i++) {
arr4[i] = arr1[i];
}

//深复制三
int[] arr5 = Arrays.copyOf(arr1, arr1.length);
print(arr5);
arr5[1] = 98;
print(arr1);

//深复制四(重点)
/*src-源数组
srcPos-源数组起始位置
dest-目标数组
destPos-目标数组起始位置
length-要复制的数组元素的数量*/
int[] arr6 = {6,7,8,9,10,5};
int[] arr7 = new int[5];
System.arraycopy(arr1, 0, arr6, 0, arr1.length);//覆盖arr6前面的数据
print(arr6);
/*System.arraycopy(arr1, 0, arr7, 0, arr1.length);
print(arr7);*/
}
//遍历数组
public static void print(int[] arr) {
for (int num : arr) {
System.out.print(num+" ");
}
System.out.println();
}

}

案例一:实现两个数组的合并。
package lesson_arr;
import java.util.Arrays;
public class Test1 {
public static void main(String[] args) {
int[] str1 = { 1, 7, 9, 11, 13, 15, 17, 19 };
int[] str2 = { 2, 4, 6, 8, 10 };
int strLen1 = str1.length;// 保存第一个数组长度
int strLen2 = str2.length;// 保存第二个数组长度
str1 = Arrays.copyOf(str1, strLen1 + strLen2);// 扩容,也可以实现复制
System.arraycopy(str2, 0, str1, strLen1, strLen2);// 将第二个数组与第一个数组合并
System.out.println("合并数组为:"+Arrays.toString(str1));// 输出数组
getNum(str1);//排序
}
}
案例二:将一维数组转化为二维数组,并求和、最小值及最大值。
package lesson_arr;
import java.util.Arrays;
public class Test2 {
public static void main(String[] args) {
int[][] arr1 = new int[3][4];//定义一个二维数组
int[] arr2 = { 4, 4, 34, 37, 3, 12, 2, 6, 5, 17, 9, 11 };//定义一个一维数组
     //将arr2转化为arr1
int n = 0;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
arr1[i][j] = arr2[n];
n++;
}
}
print(arr1);//打印转化后的二维数组
getAdd(arr1);
getMax(arr1);
getMin(arr1);
}
    //二维数组求和方法
public static void getAdd(int[][] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
sum += arr[i][j];
}
}
System.out.println("和为:" + sum);
}
    //二维数组求最大值
public static void getMax(int[][] arr) {
int maxNum = arr[0][0];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (maxNum < arr[i][j]) {
maxNum = arr[i][j];
}
}
}
System.out.println("最大值为:"+maxNum);
}
   //二维数组求最小值
public static void getMin(int[][] arr) {
int maxNum = arr[0][0];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (maxNum > arr[i][j]) {
maxNum = arr[i][j];
}
}
}
System.out.println("最小值为:"+maxNum);
}
   // 二维数组遍历方法
public static void print(int[][] arr) {
for (int i = 0; i < arr.length; i++) {// 行数
//System.out.println();
for (int j = 0; j < arr[i].length; j++) {// 列数
//System.out.print("arr[" + i + "][" + j + "]=" + arr[i][j]+"\t");
}
}
System.out.println(Arrays.deepToString(arr));
}
}

0 0
原创粉丝点击