稀疏数组和二维数组互相转换
优势:当一个二维数组里面大部分数是相同的值的时候可以转换为稀疏数组进行储存,这样起到压缩数据的作用。下面是自己敲出来的代码,欢迎小伙伴们进行学习和交流。
package com.algorithm;
/**
* @author ChillJ
*/
public class SparseArray {
/**
* 二维数组转稀疏数组
* @param lineParam 传入的行数参数
* @param columnParam 传入的列数参数
*/
public static void arrayToSparse(int lineParam, int columnParam){
System.out.println("---二维数组转稀疏数组---");
//新建一个二维数组
int[][] array = new int[lineParam][columnParam];
//给二维数组赋值
array[5][6] = 56;
array[3][2] = 32;
array[9][7] = 97;
//循环数组确认该数组中有几个不为0
int valueCount = 0;
for(int[] line : array){
for(int column : line){
if(column != 0 ) {
valueCount++;
}
}
//System.out.println();
}
//新建稀疏数组
//稀疏数组固定有三列,分别为行数,列数,不为0的值的个数
//行数为二维数组的不为0的数量+1
int[][] sparseArray = new int[valueCount+1][3];
//记录二维数组不为0的值的个数
int sparseLine = 1;
for(int i=0;i < array.length;i++){
for(int j=0;j < array[i].length;j++){
if(array[i][j] != 0 ){
sparseArray[sparseLine][0] = i;
sparseArray[sparseLine][1] = j;
sparseArray[sparseLine][2] = array[i][j];
sparseLine++;
}
}
}
sparseArray[0][0] = lineParam;
sparseArray[0][1] = columnParam;
sparseArray[0][2] = sparseLine;
//打印稀疏二维数组
for(int i=0;i < sparseArray.length;i++){
for(int j=0;j < sparseArray[i].length;j++){
System.out.printf("\t%d", sparseArray[i][j]);
}
System.out.println();
}
//稀疏数组转数组
sparseToArray(sparseArray);
}
/**
* 稀疏数组转二维数组
* @param sparseArray 稀疏数组
*/
public static void sparseToArray(int[][] sparseArray) {
System.out.println("---稀疏数组转二维数组---");
//稀疏数组转数组
int[][] normalArray = new int[sparseArray[0][0]][sparseArray[0][1]];
for(int i=1; i<sparseArray.length; i++){
normalArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
//打印数组
for(int i=0;i < normalArray.length;i++){
for(int j=0;j < normalArray[i].length;j++){
System.out.printf("\t%d", normalArray[i][j]);
}
System.out.println();
}
}
public static void main(String[] args) {
arrayToSparse(10, 10);
}
}