龙空技术网

Java一维与二维数组的拷贝与排序

java小悠 36

前言:

而今各位老铁们对“java二维数组的输出”大体比较关注,同学们都需要剖析一些“java二维数组的输出”的相关文章。那么小编同时在网摘上收集了一些对于“java二维数组的输出””的相关文章,希望朋友们能喜欢,同学们一起来了解一下吧!

Java一维与二维数组的拷贝与排序

目录

Java一维与二维数组的拷贝与排序Arrays.sort()一维数组升序排序

e.g.(demo.java)

import java.util.Arrays;public class demo {    public static void main(String[] args){        int[] arr = new int[]{1,5,98,6,78,65};        Arrays.sort(arr);        for(int i : arr){            System.out.println(i);        }}

output:

二维数组按行升序排序

e.g.(demo.java)

import java.util.Arrays;public class demo {    public static void main(String[] args){        int [][] arr = new int[][]{{1,20,3},{20,3,5},{9,0,8}};        int n = arr.length;        for(int i = 0;i < n;i++){            Arrays.sort(arr[i]);        }        for(int i = 0;i < n;i++){            for(int j : arr[i]){                System.out.print(j + " ");            }            System.out.println();        }}

output:

二维数组按列升序排序

思路:将数组转置,每行调用 Arrays.sort() ,再转置回来

e.g.(demo.java)

import java.util.Arrays;public class demo {    public static int[][] arrTransfer(int[][] arr){ //借用线代思想,对矩阵转置        int n = arr.length;        int m = arr[0].length;        int[][] ret = new int[m][n];        for(int i = 0;i < n;i++){            for(int j = 0;j < m;j++){                ret[j][i] = arr[i][j];            }        }        return ret;    }    public static void main(String[] args){        int [][] arr = new int[][]{{1,20,3},{20,3,5},{9,0,8}};        int n = arr.length;        int m = arr[0].length;//该方法适用于矩阵类二维数组,不等长二维数组不适用        int[][] tempArr = new int[m][n];        tempArr = arrTransfer(arr);        for(int i = 0;i < m;i++){            Arrays.sort(tempArr[i]);        }        arr = arrTransfer(tempArr);        for(int i = 0;i < n;i++){            for(int j : arr[i]){                System.out.print(j + " ");            }            System.out.println();        }}

output:

Java中的数组Java中数组的基本性质数组是使用统一名称引用的一组具有相同类型的数据Java中的数组属于 引用类型(对象) ,类似C语言中的指针一维数组的拷贝

e.g.(demo.java)

import java.util.Arrays;public class demo {    public static void main(String[] args){        int[] arr1 = {10,2,5,4};        int[] arr2 = arr1.clone(); //获得arr1的一份拷贝,arr2指向的内存空间不同于arr1        int[] arr3 = arr1; //获得了arr1(引用)的拷贝,赋给arr3,二者同时指向一块内存空间,因此对arr3或arr1做的操作都会反映到同一块内存空间上        Arrays.sort(arr1);        System.out.println("arr1" + Arrays.toString(arr1));        System.out.println("arr2" + Arrays.toString(arr2));        System.out.println("arr3" + Arrays.toString(arr3));    }}
二维数组的拷贝

二维数组可以看作数组的数组,即,每一个元素都是一个一维数组,因此可以依照上述拷贝一维数组的思想拷贝二维数组

e.g.(demo.java)

import java.util.Arrays;public class demo {    public static void main(String[] args){        int[][] arr1 = {{1,20,4},{23,92,24},{92,482,234}};        int[][] arr2 = arr1.clone();        int n = arr1.length;        int m = arr1[0].length;        int[][] arr3 = new int[n][m];        for(int i = 0;i < n;i++){            arr3[i] = arr1[i].clone();        }        for(int i = 0;i < n;i++){            Arrays.sort(arr1[i]);        }        System.out.println("arr1" + Arrays.toString(arr1));        System.out.println("arr2" + Arrays.toString(arr2));        System.out.println("arr3" + Arrays.toString(arr3));        for(int i = 0;i < n;i++){            System.out.println("arr1" + Arrays.toString(arr1[i]));        }        for(int i = 0;i < n;i++){            System.out.println("arr2" + Arrays.toString(arr2[i]));        }        for(int i = 0;i < n;i++){            System.out.println("arr3" + Arrays.toString(arr3[i]));        }    }}

output:

arr1[[I@4eec7777, [I@3b07d329, [I@41629346]arr2[[I@4eec7777, [I@3b07d329, [I@41629346]arr3[[I@214c265e, [I@448139f0, [I@7cca494b]arr1[1, 4, 20]arr1[23, 24, 92]arr1[92, 234, 482]arr2[1, 4, 20]arr2[23, 24, 92]arr2[92, 234, 482]arr3[1, 20, 4]arr3[23, 92, 24]arr3[92, 482, 234]

从输出可以看出,arr2和arr1值相等,指向同一块内存空间;arr3复制arr1的数据到另一块内存空间,不受arr1引用的内存空间的数据的改变影响;同时可以看出,arr1是一个特殊的数组,每个元素是一个一维数组

原文链接:

标签: #java二维数组的输出 #java二维数组输出 #java二维数组输入 #一维数组二维数组java #java数组怎么排序