稀疏数组
当一个数组中大部分元素为0,或者为同一值的数组时,可以用稀疏数组来保存该数组。 稀疏数组的处理方式是:
记录数组一共几行几列,有多少不同值 把具有不同值的元素的行列和它的值记录在一个小规模的数组中,从而缩小程序的规模 如下图,左是原始数组,右是稀疏数组;
package com. kuangsheng. array;
public class Demo09 {
public static void main ( String[ ] args) {
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 ( ) ;
}
int sum= 0 ;
for ( int i = 0 ; i < 11 ; i++ ) {
for ( int j = 0 ; j < 11 ; j++ ) {
if ( array1[ i] [ j] != 0 ) {
sum++ ;
}
}
}
System. out. println ( "有效值的个数:" + sum) ;
int [ ] [ ] array2= new int [ sum+ 1 ] [ 3 ] ;
array2[ 0 ] [ 0 ] = 11 ;
array2[ 0 ] [ 1 ] = 11 ;
array2[ 0 ] [ 2 ] = sum;
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 ( "================================" ) ;
System. out. println ( "还原" ) ;
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 ] ;
}
System. out. println ( "输出还原数组" ) ;
for ( int [ ] ints : array3) {
for ( int anInt : ints) {
System. out. print ( anInt+ "\t" ) ;
}
System. out. println ( ) ;
}
}
}