四种拷贝都是浅拷贝: for循环; object.clone 会产生新对象; native方法 System.arraycopy(src,srcpos,dest,destpos,length)不产生新对象 底层调用native Arrays.copyOf ,产生新对象 返回值T[] 底层调用System.arraycopy;
class TestArray2 { private int val; public void setVal(int val) { this.val = val; } public int getVal() { return this.val; } } public class TestDemo2 { public static void main(String[] args) { TestArray2[][] testArray2 = new TestArray2[2][2]; testArray2[0][0] = new TestArray2(); testArray2[0][1] = new TestArray2(); testArray2[1][0] = new TestArray2(); testArray2[1][1] = new TestArray2(); TestArray2[][] testArray3 = new TestArray2[2][2]; // System.arraycopy(); /*for (int i = 0; i < testArray2.length; i++) { testArray3[i] = Arrays.copyOf(testArray2[i],testArray2[i].length); //System.arraycopy(testArray2[i],0,testArray3[i],0, //testArray2[i].length); }*/ System.out.println(testArray3); System.out.println(testArray2); testArray3 = Arrays.copyOf(testArray2,testArray2.length); System.out.println(testArray3); System.out.println(testArray2); System.out.println("=============拷贝完成========="); for (int i = 0; i < testArray2.length; i++) { for (int j = 0; j < testArray2[i].length; j++) { System.out.print(testArray2[i][j].getVal()+" "); } } System.out.println(); for (int i = 0; i < testArray3.length; i++) { for (int j = 0; j < testArray3[i].length; j++) { System.out.print(testArray3[i][j].getVal()+" "); } } System.out.println(); testArray2[0][0].setVal(1000000); System.out.println("============修改完成========="); for (int i = 0; i < testArray2.length; i++) { for (int j = 0; j < testArray2[i].length; j++) { System.out.print(testArray2[i][j].getVal()+" "); } } System.out.println(); for (int i = 0; i < testArray3.length; i++) { for (int j = 0; j < testArray3[i].length; j++) { System.out.print(testArray3[i][j].getVal()+" "); } } System.out.println(); } public static void main4(String[] args) { TestArray2[][] testArray2 = new TestArray2[2][2]; testArray2[0][0] = new TestArray2(); testArray2[0][1] = new TestArray2(); testArray2[1][0] = new TestArray2(); testArray2[1][1] = new TestArray2(); TestArray2[][] testArray3 = new TestArray2[2][2]; //clone for (int i = 0; i <testArray2.length ; i++) { testArray3[i] = testArray2[i].clone(); } System.out.println("=============拷贝完成========="); for (int i = 0; i < testArray2.length; i++) { for (int j = 0; j < testArray2[i].length; j++) { System.out.print(testArray2[i][j].getVal()+" "); } } System.out.println(); for (int i = 0; i < testArray3.length; i++) { for (int j = 0; j < testArray3[i].length; j++) { System.out.print(testArray3[i][j].getVal()+" "); } } System.out.println(); testArray2[0][0].setVal(1000000); System.out.println("============修改完成========="); for (int i = 0; i < testArray2.length; i++) { for (int j = 0; j < testArray2[i].length; j++) { System.out.print(testArray2[i][j].getVal()+" "); } } System.out.println(); for (int i = 0; i < testArray3.length; i++) { for (int j = 0; j < testArray3[i].length; j++) { System.out.print(testArray3[i][j].getVal()+" "); } } System.out.println(); } public static void main3(String[] args) { TestArray2[][] testArray2 = new TestArray2[2][2]; testArray2[0][0] = new TestArray2(); testArray2[0][1] = new TestArray2(); testArray2[1][0] = new TestArray2(); testArray2[1][1] = new TestArray2(); TestArray2[][] testArray3 = new TestArray2[2][2]; for (int i = 0; i < testArray2.length; i++) { for (int j = 0; j < testArray2[i].length; j++) { testArray3[i][j] = testArray2[i][j]; } } System.out.println("=============拷贝完成========="); for (int i = 0; i < testArray2.length; i++) { for (int j = 0; j < testArray2[i].length; j++) { System.out.print(testArray2[i][j].getVal()+" "); } } System.out.println(); for (int i = 0; i < testArray3.length; i++) { for (int j = 0; j < testArray3[i].length; j++) { System.out.print(testArray3[i][j].getVal()+" "); } } System.out.println(); testArray2[0][0].setVal(1000000); System.out.println("============修改完成========="); for (int i = 0; i < testArray2.length; i++) { for (int j = 0; j < testArray2[i].length; j++) { System.out.print(testArray2[i][j].getVal()+" "); } } System.out.println(); for (int i = 0; i < testArray3.length; i++) { for (int j = 0; j < testArray3[i].length; j++) { System.out.print(testArray3[i][j].getVal()+" "); } } System.out.println(); } public static void main2(String[] args) { int[][] array = {{1,2,3},{4,5,6}}; int[][] brray = new int[2][3]; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { brray[i][j] = array[i][j]; } } System.out.println(Arrays.deepToString(array)); System.out.println(Arrays.deepToString(brray)); brray[0][0] = 1000; System.out.println(Arrays.deepToString(array)); System.out.println(Arrays.deepToString(brray)); /*int[][] brray = array; System.out.println(Arrays.deepToString(brray));*/ } /*//重载函数 public static int sum(int a,int b) {//sum(int,int ) return a+b; } public static int sum(int a,int b,int c) {//sum(int,int ,int) return a+b+c; } public static int sum(int... array) {//函数签名 }*/ public static void main1(String[] args) { int[][] array = new int[2][3]; int[][] array2 = {{1,2,3},{4,5,6},{7,8,9}}; for (int i = 0; i < array2.length; i++) { for (int j = 0; j < array2[i].length; j++) { System.out.print(array2[i][j]+" "); } System.out.println(); } System.out.println(Arrays.toString(array)); System.out.println(Arrays.deepToString(array)); int[][] array3 = new int[2][]; array3[0] = new int[4]; array3[1] = new int[5]; System.out.println(Arrays.deepToString(array3)); } }排序:从小到大排序 在array中 内部排序 冒泡:最好的时间复杂度O(n) 最坏的O(n^2)稳定 选择:时间复杂度O(n^2) 不稳定 直接插入排序:最坏的时间复杂度O(n^2) 最好的O(n)即有序的时候 稳定===>优化 shell排序 希尔排序 时间复杂度O(1) O(n) O(n^2) O(log2 N) 一维数组System.out.printin(Arrays.toString(array)) 二维数组System.out.printin(Arrays.deepToString(array)) 所有引用初始化都为null
public class TestDemo1 { public static void bubbleSort(int[] array) { int tmp = 0; boolean swap = false; for(int i = 0;i < array.length-1;i++) { for(int j = 0;j < array.length-1-i;j++) { if(array[j] > array[j+1]) { tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; swap = true; } } if(!swap) { break; } } } public static void insertSort(int[] array) { int tmp = 0; int j = 0; for(int i = 1;i < array.length;i++) { tmp = array[i]; for(j = i-1;j >= 0;j--) { if(array[j] > tmp) { array[j+1] = array[j]; } else { break; } } array[j+1] = tmp; } } public static void selectSort(int[] array) { int tmp = 0; for(int i = 0;i < array.length;i++) { for(int j = i+1;j < array.length;j++) { if(array[j] < array[i]) { tmp = array[i]; array[i] = array[j]; array[j] = tmp; } } } } public static void main(String[] args) { int[] array = {12,1,3,5,2,8,78,7}; selectSort(array); System.out.println(Arrays.toString(array)); } }