1つのスパースアレイ
使用:配列内の要素のほとんどは、0、または同一の配列の値である場合、疎なアレイは、アレイを保持するために使用することができる
:処理方法スパースアレイ
レコードの配列は、いくつかの奇数行の合計、異なる数値は
、それによって、プログラムのサイズを小さくする2つの異なる値を有する要素及び小のアレイの行に記録された値、
// 、バックギャモンを取り、例えば、11 * 11の元の2次元配列を作成する // 0は2アルビノ、1つの黒点、何ポーンがないことを示し INT [] [] = chessArr1 新しい新しい INT [ 11 ] [ 11 ]; chessArr1 [ 1 ] [ 2 ] = 1 ; chessArr1 [ 2 ] [ 3 ] = 2 ; chessArr1 [ 3 ] [ 3 ] = 1。; chessArr1 [ 4 ] [ 4 ] = 2 ; // 元の2次元配列を取得 するために(INT[]行:chessArr1){ ための(int型データ:行){ システム。アウト .printf(" %D \トン" 、データ); } システム。アウト.println(); }
スパース配列に二次元配列
元の2次元アレイを横断する、和を取得し、有効なデータの数を
作成することができる和アレイsparseArr INT [和+ 1] [洗浄することによる 3];
二次元アレイに有効なデータを疎アレイであります
// 疎なアレイに二次元配列 // 1.横断する二次元アレイの数は、非ゼロのデータを与える intを SUM = 0 ; のための(INT I = 0 ; I <chessArr1.length; I ++ ){ 用(INT J = 0 ; J <chessArr1.length; J ++ ){ IF(chessArr1 [I] [J] =!0 ){ SUM ++ ; } } } // 2に対応疎アレイ作成 INTを [] [] sparseArr = 新しい新しい INT [SUM + 1 ]、[3 ]; // 疎なアレイの割り当てに sparseArr [ 0 ] [ 0 ] = 11 ; sparseArr [ 0 ] [ 1 ] = 11 ; sparseArr [ 0 ] [ 2 ] = SUM; // 2次元アレイを横切る、非ゼロ疎な配列に格納された値 のint COUNT = 0 ; のための(INT I = 0 ; I <chessArr1.length; I ++ ){ ため(INT J = 0 ; J <chessArr1.length; J ++ ){ IF(!chessArr1 [I] [J] = 0 ){ COUNT ++ ; sparseArr [COUNT] [ 0 ] = I; sparseArr [COUNT] [ 1。 =] J; sparseArr [COUNT] [ 2 ] = chessArr1 [I] [J]; } } } // 反復の疎なアレイ システム。OUT .println(" 疎配列が得られる:" ); のための(INT I = 0 ; I <sparseArr.length; I ++ ){ 用(INT J = 0 ; J < 3 ; J ++ ){ システム。アウト .printf(" %D \ T " 、sparseArr [I] [J])。 } システム。アウト.println(); }
二次元アレイのまばらなアレイ
疎な配列の最初の行を読み取るために、データの最初の行は、元の二次元アレイchessArr2 = INT [カラム数]の[行]作成
洗浄後、アレイの再リードデータ線そして、元の2次元アレイに割り当てられました
// 元の2次元アレイにスパースアレイを復元 // 1は、第1元の2次元アレイを作成するために、最初の行のデータによれば、疎な配列の最初の行を読み取る INTを [] [] = chessArr2 新しい新しい INT [sparseArr [ 0 ] [ 0 ] [sparseArr [ 0 ] [ 1 ]]; // 二次元アレイを作成するために疎なアレイに割り当てられた再リードデータ線後2 ために(INT I = 1 ; I <sparseArr.length。 ++ I ){ chessArr2 [sparseArr [I] [ 0 ] [sparseArr [I] [ 1 ] = sparseArr [I] [ 2 ]; } // 2次元アレイを復元出力する 。システムOUTの .printlnを("プレス疎なアレイは、二次元アレイから回収された" ) のために(INT []行:chessArr2){ ため(INT データ:行){ ザシステムOUT .printf(" %D \ T " 、データ); } 。[システムOUT 。 println(); }
ファイルから読み込んだファイルに配列して、
// スパース配列に2次元配列は、直接A.TXTファイルの読み取り ファイルファイル= 新しい新しいファイル(" A.TXT " ;) てFileWriter FW = 新しい新しいてFileWriter(ファイル); のため(int型は、私は= 0を、I <sparseArr .LENGTH; I ++ ){ ため(INT J = 0 ; J < 3 ; J ++ ){ fw.write(sparseArr [I] [J] + " \ T " ); } fw.write(" \ N- " ); } fw.close(); // ファイルA.TXT二次元アレイは、読み出し システム。OUTの .println(" ファイルから得られたデータ!!! " ); BufferedReaderのBR = 新しい新しい BufferedReaderの(新しい新規 FileReaderの(" A.TXT " )) ; INT [] [] chessArr3 = NULL ; 文字列ライン; // 行 のint Z = 0 ; 一方、((= br.readLine線())!= NULL ){ Z ++ ; 文字列[] TEMP = line.split(" \トン"); もし(Z == 1 ){ chessArr3 = 新しい INT [Integer.valueOf(TEMP [ 0 ])] [Integer.valueOf(TEMP [ 1 ])]。 } 場合(Zは> 1 ){ ためには、(INTは私= 0 ; I <temp.length; I ++ ){ chessArr3 [Integer.valueOf(TEMP [ 0 ])] [Integer.valueOf(TEMP [ 1 ])] =整数。 valueOf(TEMP [ 2 ])。 } } } 用(INT {:chessArr3 []行) のための(int型データ:行){ システム。アウト .printf(" %D \トン" 、データ); } システム。アウト .println(); }
}