一、概念數組
二、處理方法markdown
三、示例spa
原數組以下:code
轉換爲稀疏數組以下:orm
一、主方法blog
@Test
public void SparseTest() {
// 建立一個原始的二維數組 11 * 11
// 0: 表示沒有棋子, 1 表示 黑子 2 表藍子
int[][] arr = new int[11][11];
arr[1][1] = 1;
arr[2][3] = 2;
arr[4][5] = 2;
System.out.println("原始數組");
for (int[] tmp:arr) {
for ( int t : tmp) {
System.out.printf("%d\t",t);
}
System.out.println();
}
int[][] sparseArr=ArrayToSparse(arr);
//1.0輸出稀疏數組
System.out.println("輸出稀疏數組");
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d\t%d\t%d\t",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
System.out.println();
}
//2.0 將係數數組寫入文件
WriteSparseToFile(sparseArr,"xishu.txt");
//3.0從文件中讀出稀疏數組
System.out.println("從文件中讀出稀疏數組");
int[][] readFileArray = ReadFileToArray("xishu.txt");
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d\t%d\t%d\t",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
System.out.println();
}
//4.0從文件中讀出稀疏數組,恢復成原來數組
System.out.println("恢復出來的二維數組");
int[][] ints = SparseToArray(readFileArray);
for (int[] tmp:ints) {
for ( int t : tmp) {
System.out.printf("%d\t",t);
}
System.out.println();
}
}
二、實現數組轉稀疏數組 get
1 //將數組轉換爲稀疏數組 2 public int[][] ArrayToSparse(int[][] arr){ 3 //將二維數組轉換爲稀疏數組 4 //1.0 遍歷獲得非零個數 5 int sum = 0; 6 for (int i = 0; i < arr.length; i++) { 7 for (int j = 0; j < arr.length; j++) { 8 if(arr[i][j]!=0) 9 sum++; 10 } 11 } 12 //2.0建立稀疏數組 13 int[][] sparseArr = new int[sum+1][3]; 14 sparseArr[0][0]=11; 15 sparseArr[0][1]=11; 16 sparseArr[0][2] =sum; 17 18 int count = 0; 19 //3.0遍歷 填充稀疏數組非零元素 20 for (int i = 0; i < 11; i++) { 21 for (int j = 0; j <11 ; j++) { 22 if(arr[i][j]!=0){ 23 ++count; 24 sparseArr[count][0]=i; 25 sparseArr[count][1]=j; 26 sparseArr[count][2]=arr[i][j]; 27 } 28 } 29 } 30 31 return sparseArr; 32 }
三、將稀疏數組寫入文件it
1 public void WriteSparseToFile(int[][] sparseArr,String fileName){ 2 FileWriter fw=null; 3 BufferedWriter bw=null; 4 try { 5 fw = new FileWriter(new File(fileName)); 6 bw = new BufferedWriter(fw); 7 for (int i = 0; i < sparseArr.length; i++) { 8 9 String tmpStr =""; 10 for (int j = 0; j <sparseArr[i].length ; j++) { 11 tmpStr+=sparseArr[i][j]+" "; 12 } 13 tmpStr+="\r\n"; 14 bw.write(tmpStr); 15 bw.flush(); 16 } 17 } catch (IOException e) { 18 e.printStackTrace(); 19 }finally { 20 if(bw!=null) { 21 try { 22 bw.close(); 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } 26 } 27 if(fw!=null){ 28 try { 29 fw.close(); 30 } catch (IOException e) { 31 e.printStackTrace(); 32 } 33 } 34 35 } 36 }
四、從文件中讀出稀疏數組io
1 public int[][] ReadFileToArray(String fileName){ 2 FileReader fr = null; 3 BufferedReader br = null; 4 int[][] readArray={}; 5 try { 6 fr = new FileReader(new File(fileName)); 7 br = new BufferedReader(fr); 8 9 String lineStr=""; 10 ArrayList<String> list = new ArrayList<>(); 11 try { 12 while ((lineStr= br.readLine())!=null){ 13 list.add(lineStr); 14 } 15 readArray = new int[list.size()][list.get(0).length()]; 16 for (int i = 0;i<list.size() ; i++) { 17 String[] c = list.get(i).split(" "); 18 for (int j = 0; j <c.length ; j++) { 19 readArray[i][j]=Integer.parseInt(c[j]); 20 } 21 } 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } 25 } catch (FileNotFoundException e) { 26 e.printStackTrace(); 27 }finally { 28 if(br!=null) { 29 try { 30 br.close(); 31 } catch (IOException e) { 32 e.printStackTrace(); 33 } 34 } 35 if(fr!=null){ 36 try { 37 fr.close(); 38 } catch (IOException e) { 39 e.printStackTrace(); 40 } 41 } 42 return readArray; 43 } 44 45 46 }
五、稀疏數組轉數組table
1 //將稀疏數組轉換爲數組 2 public int[][] SparseToArray(int[][] sparseArr){ 3 //將稀疏數組恢復成數組 4 //1.0先讀取稀疏數組的第一行,根據第一行的數據,建立原始的二維數組 5 int[][] arr = new int[sparseArr[0][0]][sparseArr[0][1]]; 6 //2.0在讀取稀疏數組後幾行的數據(從第二行開始),並賦給 原始的二維數組 便可 7 for (int i = 1; i <sparseArr.length ; i++) { 8 arr[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2]; 9 } 10 11 return arr; 12 }