一、二维数组的概述:
目录
[Java 用sort对二维数组进行排序](#Java 用sort对二维数组进行排序)
二维数组简单概述:Java中的二维数组一般应用在矩阵的一些运算、棋盘游戏中棋盘的实现、二维数据的处理、图表的绘制、数据库的存储等方面。特别是在处理数据 和表示矩阵等情况下非常有用,可以方便的存储和操作数据。
二、二维数组图解:
二维数组本质上是每个一维数组都包含一个或多个元素,其中每个元素都代表二维数组中的一个元素。因此,二维数组是以数组作为其元素的数组,即数组的数组。
例如:int[ ][ ] arr = new int[3][4];(3行,4列)
这段代码创建的时候是创建了数组,如下图。
三、二维数组的四种创建方式:
1.通过实例化创建一个数组对象
//方式一
int[][] arr1 = new int[3][4];
//循环遍历数组给数组赋值
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
arr1[i][j] = 5;
}
}
//打印输出一下看一下结果
System.out.println(Arrays.deepToString(arr1));
以上这段代码的输出结果:
[[5, 5, 5, 5], [5, 5, 5, 5], [5, 5, 5, 5]]
2.通过数组指针用new开辟空间
java
//方式二
int[][] arr2 = new int[3][];
arr2[0] = new int[2]; // 第一行 2个元素
arr2[1] = new int[4]; //第二行 3个元素
for (int i = 0; i < arr2.length; i++) {
if (arr2[i] != null) {
for (int j = 0; j < arr2[i].length; j++) {
arr2[i][j] = 5;
}
}
}
System.out.println(Arrays.deepToString(arr2));
以上这段代码的输出结果:
通过new开辟空间之后,如果不赋值,该空间的值是默认值null。
java
[[5, 5], [5, 5, 5, 5], null]
3.声明并初始化
java
//方式三
int[][] arr3 = new int[][] { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };
4.声明并初始化的简写方式
java
//方式四,通用简写方式
int[][] arr4 = { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };
以下是使用二维数组时需要注意的几个事项:
声明和初始化:在声明二维数组时,需要指定行和列的数量。例如,int[][] array = new int[3][4];声明了一个3行4列的二维数组。
访问元素:可以通过array[row][col]的方式访问二维数组中的元素。行和列都是从0开始计数的。
越界:访问二维数组的元素时,需要注意不要越界。例如,访问array[3][4]将会导致数组越界异常。
初始化:在使用二维数组之前,需要先对其进行初始化。可以通过分配 初始值的方式初始化二维数组,也可以在声明时直接初始化。
内存表示:二维数组在内存中是连续存储的。每一行都是一个连续的元素序列,然后每一行的元素在内存中是连续存储的。
传递参数:当将二维数组作为函数参数传递时,需要指定列的数量。这是因为Java在传递二维数组时实际上是传递了一个指向二维数组的指针。
四、Java 用sort对二维数组进行排序
用Arrays.sort()对一维数组进行降序排序(改变原来数组)相信大家一定不陌生,但对今天给大家分享一下sort对二维数组的3种排序方式。
1.重写compare()方法
javaimport java.util.Arrays; import java.util.Comparator; public class test { public static void main(String[] args) { int[][] arr = {{1,5},{5,3},{3,34},{2,4}}; Arrays.sort(arr, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[0] - o2[0];//数组里面的下标为0,表示排序根据数组的第一列排序 } }); for (int[] arrs:arr){ for (int n:arrs){ System.out.print(n+" "); } System.out.println(); } } }
(2)使用Lambda表达式的方式对Comparator比较器进行简写(JDK1.8以上可用Lambda表达式)
java
import java.util.Arrays;
import java.util.Comparator;
public class test {
public static void main(String[] args) {
int[][] arr = {{1,5},{5,3},{3,34},{2,4}};
Arrays.sort(arr,((o1, o2) -> {
return o1[0]-o2[0];
}));
for (int[] arrs:arr){
for (int n:arrs){
System.out.print(n+" ");
}
System.out.println();
}
}
}
(3)用comparingInt(a->a[index])排序
二维数组会根据第index+1(index=1或index=0)的数据进行排序
java
import java.util.Arrays;
import java.util.Comparator;
public class test {
public static void main(String[] args) {
int[][] arr = {{1,5},{5,3},{3,34},{2,4}};
Arrays.sort(arr,Comparator.comparingInt(a->a[0]));//根据二维数组的第一列数据进行比较
for (int[] arrs:arr){
for (int n:arrs){
System.out.print(n+" ");
}
System.out.println();
}
}
}
运行结果
一下是上述三种方法以数组第一列为数据进行排序的运行结果
根据第二列数据进行排序
java
import java.util.Arrays;
import java.util.Comparator;
public class test {
public static void main(String[] args) {
int[][] arr = {{1,5},{5,3},{3,34},{2,4}};
Arrays.sort(arr,((o1, o2) -> {
return o1[1]-o2[1];
}));
for (int[] arrs:arr){
for (int n:arrs){
System.out.print(n+" ");
}
System.out.println();
}
}
}