稀疏数组
当一个数组大部分元素为0或者同一个值,即可用稀疏数组来保存
1. 记录数组一共有几行几列,有多少个不同的值
2. 把具有不同的值得元素的行列和值记录在一个小规模的数组中
二维数组转稀疏数组思路
1. 遍历原始二维数组,得到有效的个数sum
2. 根据sum创建稀疏数组
3. 将二维数组有效数据存入到稀疏数组中
稀疏数组转二维数组
1. 先读取稀疏数组第一行,根据第一行的数据创建原始的二维数组
2. 再读取稀疏数组后面的数据并赋给原始的二维数组
代码实现
public class SparseArray {
public static void main(String[] args) {
//创建一个二维数组棋盘 11*11
int chessArr1[][] = new int[11][11];
//放入两个棋子
chessArr1[1][2]=1;
chessArr1[2][3]=2;
for (int[] i : chessArr1) {
for (int i1 : i) {
System.out.println(i1);
}
}
//将二维数组转为稀疏数组
int sum= 0;
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[i].length; j++) {
if (chessArr1[i][j]!=0){
sum++;
}
}
}
//创建对应的稀疏数组
int sparseArr[][] = new int[sum+1][3];
//给稀疏数组赋值
sparseArr[0][0]=chessArr1.length;
sparseArr[0][1]=chessArr1[0].length;
sparseArr[0][2]=sum;
//遍历二维数组,将非0的值存入稀疏数组
int count = 0;//第几个非0数字
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[i].length; j++) {
if (chessArr1[i][j]!=0){
count++;
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chessArr1[i][j];
}
}
}
System.out.println("得到的稀疏数组为:");
for (int[] ints : sparseArr) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
//将稀疏数组还原成二维数组
int[][] arr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i = 1; i < sparseArr.length; i++) {
int num1 = sparseArr[i][0];
int num2 = sparseArr[i][1];
int num3 = sparseArr[i][2];
arr2[num1][num2]=num3;
}
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
System.out.print(arr2[i][j]+"\t");
}
System.out.println();
}
}
}
将二维数组写入磁盘,以及取出
package util;
import java.io.*;
public class ArrayWrite {
public static Object[][] writeArr(Object[][] objects) throws IOException {
File file = new File("d:\\array.txt"); //存放数组数据的文件
FileWriter out = new FileWriter(file); //文件写入流
Object[][] arr2 = new Object[objects.length][objects[0].length];
//将数组中的数据写入到文件中。每行各数据之间TAB间隔
for(int i=0;i<objects.length;i++){
for(int j=0;j<objects[i].length;j++){
out.write(objects[i][j]+"\t");
}
out.write("\r\n");
}
out.close();
BufferedReader in = new BufferedReader(new FileReader(file)); //
String line; //一行数据
int row=0;
//逐行读取,并将每个数组放入到数组中
while((line = in.readLine()) != null){
String[] temp = line.split("\t");
System.out.println(line+"第几行 "+row);
for(int j=0;j<temp.length;j++){
System.out.println(j);
arr2[row][j] = Integer.parseInt(temp[j]);
}
row++;
}
in.close();
//显示读取出的数组
for(int i=0;i<objects.length;i++){
for(int j=0;j<objects[i].length;j++){
System.out.print(arr2[i][j]+"\t");
}
System.out.println();
}
return arr2;
}
}