1. 程式人生 > 實用技巧 >java抽象類,多型1

java抽象類,多型1

稀疏陣列

如果一個數組中大部分數值都是重複的

那麼我麼們可以建立另一個比較小的陣列,把大的陣列中的

行,列,儲存的元素個數

橫座標,縱座標,元素的值

存起來這樣可以節省一些空間

int[][] array1=new int[11][11];
array1[1][2]=1;
array1[2][3]=2;

/*
* 初始化二維陣列
* <p>
* 0 0 0 0 0 0 0 0 0 0 0
* 0 0 1 0 0 0 0 0 0 0 0
* 0 0 0 2 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0 0
* </p>
*/

把二維陣列轉換為稀疏陣列

//轉換為稀疏陣列
//1.獲取有效值的個數
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array1[i][j] != 0) {
sum++;
}
}
}
//2.建立一個稀疏陣列
int[][] array2 = new int[sum + 1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
//3.遍歷二維陣列將非0的值存放到稀疏陣列中
int count = 0; //有效值的個數
for (int i = 0; i < array1.length; i++) { //行
for (int j = 0; j < array1[i].length; j++) { //列
if (array1[i][j] != 0) { //有效值
count++;
array2[count][0] = i; //橫座標
array2[count][1] = j; //縱座標
array2[count][2] = array1[i][j]; //值
}
}
}
/**
* 11 11 2
* 1 2 1
* 2 3 2
*/

還原稀疏陣列

//讀取稀疏陣列的值
int[][] array3=new int[array2[0][0]][array2[0][1]];
for (int i = 1; i < array2.length; i++) {
array3[array2[i][0]][array2[i][1]]=array2[i][2];
}

//輸出原始陣列
for (int[] ints : array1) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println("");
}