Java一维与二维数组的拷贝与排序
2022-02-15 16:37
519 查看
Java一维与二维数组的拷贝与排序
[TOC]
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:
1 5 6 65 78 98
二维数组按行升序排序
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:
1 3 20 3 5 20 0 8 9
二维数组按列升序排序
思路:将数组转置,每行调用
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] ; 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] ; 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:
1 0 3 9 3 5 20 20 8
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 [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】剑指Offer面试题四:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数
- Java基础学习11(小知识点:一维二维数组的写法)
- Java 二维数组根据维度升序或降序排序
- Java数组 一维数组,二维数组
- Java array[][] .clone() 二维数组和一维数组不同
- JAVA中对一维数组排序的方法(在快速排序上进行的优化)
- 第2章 Java编程基础——FAQ2.25 如何实现一维和二维数组的遍历?
- 【JAVA】基础:数组、二维数组、排序
- 请通过代码实现以下功能:输入一个5X5的二维数组,将数组进行排序,其中一维数组按照平均值降序,一维数组内部升序排列。
- java二维数组排序
- java数组(一维数组,二维数组)
- Java 实现二维数组按指定列经行排序
- java-一维二维数组的定义、使用二维数组、遍历数组
- 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完 4000 成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- PHP数组排序,一维数组,二维数组排序。
- Java中的一维数组与二维数组
- Java基础——数组(一维数组,二维数组)
- Java基础 : 一维与二维数组的遍历与最大值
- java个人学习笔记05(进制装换+排序查找+二维数组)