稀疏数组:
一般使用在存在大量相同数据的表格中,存储了许多没有意义的数据。举个例子:一个数组存储了1000个数据,有效数据仅仅只有几个,就可以使用稀疏数组存储。
要求:
1.假设有一个11*11的棋盘,1代表白子,2代表黑子 2.目前棋盘上有三个棋子,分别位于二位数组的[1][2]白子、[2][3]白子、[3][4]黑子 3.创建对应的二维数组,并将其转化为稀疏数组存入map.data文件中
实现:
package sparsearr;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
/*
* 二维数组与稀疏数组的转化
* */
public class SparseArray {
public static void main(String[] args) throws IOException {
/*
1.假设有一个11*11的棋盘,1代表白子,2代表黑子
2.目前棋盘上有三个棋子,分别位于二位数组的[1][2]白子、[2][3]白子、[3][4]黑子
3.创建对应的二维数组,并将其转化为稀疏数组存入map.data文件中
*/
//创建对应的二位数组
int[][] chessArr = new int[11][11];
//存入数据
chessArr[1][2] = 1;
chessArr[2][3] = 1;
chessArr[3][4] = 2;
//遍历数组,获取其中有效数据的条数并记录
int sum = 0;
System.out.println("原始数组:");
for (int i =0;i<chessArr.length;i++) {
for (int j = 0; j < chessArr[i].length; j++) {
System.out.printf("%d\t", chessArr[i][j]);
if (chessArr[i][j] != 0)
sum++;
}
System.out.println();
}
System.out.println("原始数组中的有效数据条数为:"+sum);
System.out.println("------------------------------------");
//将二维数组转换为稀疏数组
//创建稀疏数组,行数=有效数据+1;列数=3
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<chessArr.length;i++) {
for (int j = 0; j < chessArr[i].length; j++) {
if (chessArr[i][j] != 0){
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = chessArr[i][j];
}
}
}
//输出稀疏数组,并将稀疏数组存入map.data
BufferedWriter bw = new BufferedWriter(new FileWriter("map.data"));
System.out.println("稀疏数组:");
for(int[] sparse : sparseArray){
for(int data : sparse){
bw.write(data+" ");
System.out.printf("%d\t",data);
}
bw.newLine();
System.out.println();
}
//关闭资源
bw.close();
}
}
结果:
map.data :
要求:
1.读取上述map.data文件,将其存入稀疏数组 2.将稀疏数组转化为二维数组并输出
实现:
package sparsearr;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class SparseArray2 {
public static void main(String[] args) throws IOException {
/*
* 1.读取上述map.data文件,将其存入稀疏数组
* 2.将稀疏数组转化为二维数组并输出
* */
BufferedReader br = new BufferedReader(new FileReader("map.data"));
//定义稀疏数组
int[][] sparseArray = new int[4][3];
String str;
int count = 0;
//获取数据
while((str=br.readLine())!=null){
//将每行数据拆分为单个数据
String[] s = str.split(" ");
for(int i = 0;i<s.length;i++){
sparseArray[count][i] = Integer.parseInt(s[i]);
}
count++;
}
//遍历稀疏数组
System.out.println("稀疏数组:");
for(int[] arr : sparseArray){
for(int data : arr){
System.out.printf("%d\t",data);
}
System.out.println();
}
System.out.println("-----------------------------");
//将稀疏数组转化为二维数组
int[][] chessArray = new int[sparseArray[0][0]][sparseArray[0][1]];
//遍历稀疏数组,将数据添加到二维数组
for(int i = 1;i<sparseArray.length;i++){
chessArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
//遍历二维数组
System.out.println("恢复后的二维数组:");
for(int[] arr : chessArray){
for(int data : arr){
System.out.printf("%d\t",data);
}
System.out.println();
}
br.close();
}
}
结果: