本文共 1807 字,大约阅读时间需要 6 分钟。
用来简化某个二维数组中大量无效数据的一种二维数组
举例:
0 0 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 00 0 0 2 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 3 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0
这种含有大量0或者同一个数值的情况下就可以考虑使用稀疏数组
一般是如下处理:
(1)记录原始二维数组一共几行几列,有多少个不同的值;
(2)把具有不同值的元素的行及列值记录在一个小规模的数组中,从而缩小程序的规模
例如:
0: 10 10 31: 1 2 12: 2 3 23: 4 4 3
其中,第一行记录的信息是原始二维数组的行、列信息以及有效数据的个数,后面依次存储的是有效数据的行、列信息以及所代表的数值。
具体实现方法:
(1)遍历原始的二维数组,得到有效数据的个数sum
(2)根据sum就可以创建稀疏数组sparseArr int[sum+1][3]
(3)将二维数据的有效数据存入到稀疏数组
代码实现:
package com.zcx;/** * @author Kesrn * 稀疏数组:用于二维数组中存在多个相同或者为0的数据 */public class ArrayTest { public static void main(String[] args) { //原始二维数组-》稀疏数组 //原始数据 int [][] arr=new int[11][11]; arr[1][2]=1; arr[2][3]=2; arr[3][4]=2; for (int[] is : arr) { for(int num:is) { System.out.printf("%d\t",num); } System.out.println(); } //获取有限数据sum int sum=0; for (int i =0;i<11;i++) { for(int j =0;j<11;j++) { if(arr[i][j] != 0) { sum++; } } } System.out.println(sum); //创建对应的稀疏数组 int sparseArray[][]=new int[sum+1][3]; sparseArray[0][0] =11; sparseArray[0][1] =11; sparseArray[0][2] =sum; int count = 0;//记录有效的数据个数 for (int i =0;i<11;i++) { for(int j =0;j<11;j++) { if(arr[i][j] != 0) { count++; sparseArray[count][0] = i; sparseArray[count][1] = j; sparseArray[count][2] = arr[i][j]; } } } for(int i = 0;i< sparseArray.length;i++) { System.out.printf("%d\t%d\t%d\t\n",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]); } System.out.println();
当然我们存储为稀疏数组之后,也得能从稀疏数组转回原始二维数组:
具体实现:
(1)先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
(2)在读取稀疏数组除了第一行后几行的数据,并赋给原始二维数组
//原始二维数组《-稀疏数组 int i = sparseArray[0][0]; int j = sparseArray[0][1]; int newArr[][] = new int[i][j]; for(int k = 1;k
转载地址:http://hxewi.baihongyu.com/