前奏
* 提示:稀疏数组是一种特殊的二维数组
* 什么时候用到:当一个普通二维数组的默认值数量大于有效值得数量就可以用 稀疏数组进行压缩
* 特点: 第一行第一列代表:普通数组的总行数
* 第一行第二列代表:普通数组的总列数
* 第一行第三列代表:普通数组的有效个数
* 该演示整个流程: 普通二维数组---->稀疏数组---->文件----->稀疏数组----->普通二维数组
技术知识点:用到到了流对象 BufferedWriter(缓冲输出流) BufferedReader(缓冲输入流)
代码
public class SparseArrayDemo {
public static void main(String[] args) {
int [][] commonArray=new int [10][4];
commonArray[0][1]=777;
commonArray[1][1]=777;
commonArray[2][1]=777;
System.out.println("============转换前的样子============");
for(int [] arr:commonArray){
for(int arr2: arr){
System.out.print(arr2+"\t\t");
}
System.out.println();
}
System.out.println("============转换后的样子============");
int[][] ints = commonArrayConverSparseArray(commonArray);
for(int [] arr:ints){
for(int arr2: arr){
System.out.print(arr2+"\t\t");
}
System.out.println();
}
System.out.println("============转入到文件中============"+sparseArrayToFile(ints));
System.out.println("============到文件中转换成稀疏数组============");
int[][] ints1 = fileToSparseArray();
for(int [] arr:ints1){
for(int arr2: arr){
System.out.print(arr2+"\t\t");
}
System.out.println();
}
System.out.println("============稀疏数组转二维数组============");
int[][] ints2 = sparseArrayConverCommonArray(ints1);
for(int [] arr:ints2){
for(int arr2: arr){
System.out.print(arr2+"\t\t");
}
System.out.println();
}
}
public static int [][] commonArrayConverSparseArray(int [][] commonArray){
int countLineNumber= commonArray.length;
int countColumnNumber= commonArray[0].length;
int countValidNumber= getArrayValidCountNumber(commonArray);
int [][] sparseArray=new int [countValidNumber+1][3];
sparseArray[0][0]=countLineNumber;
sparseArray[0][1]=countColumnNumber;
sparseArray[0][2]=countValidNumber;
int tempIndex=1;
for(int index=0;index<countLineNumber;index++){
for(int index2=0;index2<countColumnNumber;index2++){
if(commonArray[index][index2]!=0){
sparseArray[tempIndex][0]=index;
sparseArray[tempIndex][1]=index2;
sparseArray[tempIndex][2]=commonArray[index][index2];
tempIndex++;
}
}
}
return sparseArray;
}
public static boolean sparseArrayToFile(int [][] sparseArray){
try {
BufferedWriter writer=new BufferedWriter(new FileWriter("D:\\test.txt"));
for(int []arr:sparseArray){
for(int element:arr){
writer.write(element+"\t");
}
writer.newLine();
writer.flush();
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public static int[][] fileToSparseArray(){
int [][] sparseArray=null;
try {
int sparseIndex=0;
String readString="";
BufferedReader reader=new BufferedReader(new FileReader("D:\\test.txt"));
while((readString=reader.readLine())!=null){
int[] array = Arrays.stream(readString.trim().split("\t")).mapToInt(Integer::parseInt).toArray();
if(sparseArray==null){
sparseArray=new int[array[2]+1][3];
}
sparseArray[sparseIndex][0]=array[0];
sparseArray[sparseIndex][1]=array[1];
sparseArray[sparseIndex][2]=array[2];
sparseIndex++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
return sparseArray;
}
public static int[][] sparseArrayConverCommonArray(int[][] sparseArray){
int [][] commonArray=new int [sparseArray[0][0]][sparseArray[0][1]];
for(int index=1;index<sparseArray.length;index++){
commonArray[sparseArray[index][0]][sparseArray[index][1]]=sparseArray[index][2];
}
return commonArray;
}
public static int getArrayValidCountNumber(int [][] commonArray){
int countNumber=0;
for(int [] arr1:commonArray){
for(int arr:arr1){
if(arr!=0){
countNumber++;
}
}
}
return countNumber;
}
}
结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/51557f1200f78807189c3c18de33759d.png)