稀疏数组:
自定义:
为了有效利用内存,将原有数组进行压缩,只保存数组中有效数
代码:
举例中将11*11的棋盘来做二维数组,用稀疏数组压缩,并再次还原数组
package array;
//稀疏数组的运用
public class ArrayDemo08 {
public static void main(String[] args) {
//1.创建一个二维数组11*11的棋盘 0:没有棋子 1:黑棋 2:白棋
int[][] array1 = new int[11][11];
array1[1][2] = 1;
array1[2][3] = 2;
// 输出原始的数组
System.out.println("输出原始的数组:");
for (int[] ints : array1) {
for (int anInt : ints) { //这里是用数组的方法遍历数组每个元素
System.out.print(anInt + "\t");
}
System.out.println();//下一行
}
//遍历的第二种方法
/* for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
System.out.print(array1[i][j]+" ");
}
}
*/
//转换为稀疏数组保存
//获取有效值的个数
int num =0 ;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array1[i][j] != 0) {
num++;
}
}
} System.out.println("有效值的个数为" + num);
// 2.创建一个稀疏数组的数组
int[][] array2 = new int[num+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = num;
//遍历二维数组,将非零的值,存放在稀疏数组中
int count = 0;
for (int i = 0 ; i< array1.length; i++){
for(int j =0;j<array1.length;j++){
if (array1[i][j]!= 0){//和上面遍历的方法是一样的,这次的目的将是挑出棋盘的有效值,并转成稀疏数组
count++;
array2[count][0] =i;
array2[count][1] =j;
array2[count][2] =array1[i][j];
}
}
}
System.out.println("稀疏数组");
for (int i = 0 ; i< array2.length; i++){
System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");
} System.out.println("================");
// 还原数组
// 1.读取稀疏数组
int[][] array3 = new int[array2[0][0]][array2[0][1]];
// 2.稀疏数组中的值还原成棋盘数组的元素
for (int i = 1; i < array2.length; i++) {
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
// 3.打印棋盘数组
for (int[] ints:array3) {
for(int anInt : ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}