用途:压缩
package algorithm.array;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.util.Arrays;
public class SparseArray {
public static void main(String[] args) {
int[][] array = buildArray(9,9);
int[][] sparse = transArray(array);
int[][] origin = originArray(sparse);
int[][] out = IOutil(sparse);
for (int[] is : out) {
for (int d : is) {
System.out.printf("%d\t", d);
}
System.out.println();
}
}
private static int[][] IOutil(int[][] sparse) {
try {
OutputStream os = new FileOutputStream("map.data");
for (int[] row : sparse) {
String rows = Arrays.toString(row);
String s = rows+"\r\n";
os.write(s.getBytes());
}
BufferedReader is = new BufferedReader(new FileReader("map.data"));
String line = is.readLine();
String[] s = line.substring(1, line.length()-1).split(",");
int[][] newArray = new int[Integer.parseInt(s[0].trim())][Integer.parseInt(s[1].trim())];
while((line = is.readLine()) != null) {
String[] ss = line.substring(1, line.length()-1).split(",");
newArray[Integer.parseInt(ss[0].trim())][Integer.parseInt(ss[1].trim())] = Integer.parseInt(ss[2].trim());
}
return newArray;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static int[][] originArray(int[][] sparse) {
int[][] origin = new int[sparse[0][0]][sparse[0][1]];
for (int i = 1; i < sparse.length; i++) {
origin[sparse[i][0]][sparse[i][1]] = sparse[i][2];
}
return origin;
}
private static int[][] transArray(int[][] array) {
int sum = 0;
for (int[] row : array) {
for (int data : row) {
if (data != 0) {
sum++;
}
}
}
int[][] sparseArray = new int[sum+1][3];
sparseArray[0][0] = array.length;
sparseArray[0][1] = array[0].length;
sparseArray[0][2] = sum;
int count = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
if (array[i][j] != 0) {
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = array[i][j];
}
}
}
return sparseArray;
}
private static int[][] buildArray(int row, int col) {
int[][] a = new int[row][col];
a[1][3] = 19;
a[3][6] = 8;
a[5][6] = 12;
return a;
}
}