应用场景
当数组中大部分元素的值都为同一值时(如0),可转换为稀疏数组(如棋盘、地图等)
处理方法
记录数组共几行几列,有多少个不同的值 将不同的值的元素的行、列、值记录到一个小规模数组中,从而缩小规模
处理思路
代码实现
package com. cxf. datastructures. sparsearray;
public class SparseArray {
public static void main ( String[ ] args) {
int [ ] [ ] chessArray1 = new int [ 11 ] [ 11 ] ;
chessArray1[ 1 ] [ 2 ] = 1 ;
chessArray1[ 2 ] [ 3 ] = 2 ;
chessArray1[ 3 ] [ 4 ] = 3 ;
System. out. println ( "遍历原始二维数组:" ) ;
for ( int [ ] row : chessArray1) {
for ( int data : row) {
System. out. printf ( "%d\t" , data) ;
}
System. out. println ( ) ;
}
System. out. println ( ) ;
int sum = 0 ;
for ( int [ ] row : chessArray1) {
for ( int data : row) {
if ( data != 0 ) {
sum++ ;
}
}
}
int [ ] [ ] sparseArr = new int [ sum + 1 ] [ 3 ] ;
sparseArr[ 0 ] [ 0 ] = 11 ;
sparseArr[ 0 ] [ 1 ] = 11 ;
sparseArr[ 0 ] [ 2 ] = sum;
int count = 0 ;
for ( int i = 0 ; i < 11 ; i++ ) {
for ( int j = 0 ; j < 11 ; j++ ) {
if ( chessArray1[ i] [ j] != 0 ) {
count++ ;
sparseArr[ count] [ 0 ] = i;
sparseArr[ count] [ 1 ] = j;
sparseArr[ count] [ 2 ] = chessArray1[ i] [ j] ;
}
}
}
System. out. println ( "遍历稀疏数组:" ) ;
for ( int [ ] data : sparseArr) {
System. out. printf ( "%d\t%d\t%d\t\n" , data[ 0 ] , data[ 1 ] , data[ 2 ] ) ;
}
System. out. println ( ) ;
int row = sparseArr[ 0 ] [ 0 ] ;
int col = sparseArr[ 0 ] [ 1 ] ;
int dataSum = sparseArr[ 0 ] [ 2 ] ;
int [ ] [ ] chessArray2 = new int [ row] [ col] ;
for ( int i = 1 ; i <= dataSum; i++ ) {
int dataRow = sparseArr[ i] [ 0 ] ;
int dataCol = sparseArr[ i] [ 1 ] ;
int data = sparseArr[ i] [ 2 ] ;
chessArray2[ dataRow] [ dataCol] = data;
}
System. out. println ( "遍历由稀疏数组转换得到的原始二维数组:" ) ;
for ( int [ ] row2 : chessArray2) {
for ( int data2 : row2) {
System. out. printf ( "%d\t" , data2) ;
}
System. out. println ( ) ;
}
}
}
测试结果
遍历原始二维数组:
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 3 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
遍历稀疏数组:
11 11 3
1 2 1
2 3 2
3 4 3
遍历由稀疏数组转换得到的原始二维数组:
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 3 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
Process finished with exit code 0