1、什么是稀疏数组
稀疏数组就是将原来的数组进行简化,压缩原来的数组,减少内存的使用。
2、稀疏数组的实现
分析:
原来的数组存在大量相同的数据0,其它不同的数据仅仅占一小部分,此时可以用稀疏数组来保存该数组。
处理方式:
1) 记录数组一共有几行几列,有多少个不同的值
2) 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
稀疏数组的总共有三列,其中,第一行分别是原数组的行列数,和存在多少个不同的值。
其它行数说明了在原数组不同数据出现的行列数和值。
说明:以上稀疏数组第一行,表示原数组有11行,11列,有2个和0不同的值。
第二行的1、2表示在原数组的第二行第三列(数组下标从0开始),第三列表示值为1
第三行的2、3表示在原数组的第三行第四列(数组下标从0开始),第三列表示值为2
附上代码
package sparsearray;
import java.util.ArrayList;
public class SparseArrayDemo {
public static void main(String[] args) {
System.out.println("这是之前的二维数组");
int[][] arr1 = new int[11][11];
arr1[1][2] = 1;
arr1[2][3] = 2;
for (int[] rows : arr1) {
for (int column : rows) {
System.out.print(column+" ");
}
System.out.println("");
}
StringBuffer sb = new StringBuffer();
int sum=0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if(arr1[i][j]!=0){
sum++;
sb.append(i);
sb.append(j);
sb.append(arr1[i][j]);
}
}
}
// System.out.println(sum);
System.out.println("这是稀疏数组");
int row1 = sb.charAt(0)-48;
int column1 = sb.charAt(1)-48;
int result1=sb.charAt(2)-48;
int row2 = sb.charAt(3)-48;
int column2 = sb.charAt(4)-48;
int result2=sb.charAt(5)-48;
int[][] sparsearray = new int[sum+1][3];
sparsearray[0][0]=11;
sparsearray[0][1]=11;
sparsearray[0][2]=sum;
sparsearray[1][0]=row1;
sparsearray[1][1]=column1;
sparsearray[1][2]=result1;
sparsearray[2][0]=row2;
sparsearray[2][1]=column2;
sparsearray[2][2]=result2;
for (int[] rows : sparsearray) {
for (int column : rows) {
System.out.print(column+" ");
}
System.out.println("");
}
System.out.println("将稀疏数组转换成二维数组");
ArrayList<Integer> bs = new ArrayList<Integer>();
for (int i = 0; i <3 ; i++) {
for (int j = 0; j < 3; j++) {
bs.add(sparsearray[i][j]);
}
}
int[] array = new int[9];
for (int i = 0; i < 9; i++) {
array[i]=bs.get(i);
}
int[][] reversearray = new int[array[0]][array[1]];
for (int i = 0; i <array[0]; i++) { //初始化反转后的数组
for (int j = 0; j < array[1]; j++) {
reversearray[i][j]=0;
}
}
reversearray[array[3]][array[4]]=array[5];
reversearray[array[6]][array[7]]=array[8];
for (int[] rows : reversearray) {
for (int column : rows) {
System.out.print(column+" ");
}
System.out.println("");
}
}
}