稀疏数组sparseArray
稀疏数组sparseArray
应用实例
1) 使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等)
2) 把稀疏数组存盘,并且可以从新恢复原来的二维数组数
3) 整体思路分析
4) 代码实现
import scala.collection.mutable.ArrayBuffer //稀疏数组--压缩 恢复 object SparseArr { def main(args: Array[String]): Unit = { val rowSize = 11 // 棋盘的行 val colSize = 11 // 棋盘的列 //演示一个稀疏数组的使用 val chessMap = Array.ofDim[Int](rowSize, colSize) //初始化 chessMap(1)(2) = 1 // 1 代表黑子 chessMap(2)(3) = 2 // 2 代表白子 //输出原始的棋盘 println("------输出棋盘原始数组-------") for (item <- chessMap) { for (item2 <- item) { printf("%d\t", item2) } println() } //将chessMap转成稀疏数组 // 思路 => 效果是达到对数据的压缩 // class Node (row ,col ,value) // ArrayBuffer val sparseArr = ArrayBuffer[Node]() val node = new Node(rowSize,colSize,0) sparseArr.append(node) for ( i <- 0 until(chessMap.length)){ for ( j <- 0 until(chessMap(i).length) ){ //判断该值是否为0,如果不为0就保存 if(chessMap(i)(j) !=0 ){ //构建一个Node val node = new Node(i,j,chessMap(i)(j)) //加入到稀疏数组 sparseArr.append(node) } } } println("------输出棋盘稀疏数组-------") for ( node <- sparseArr){ printf("%d\t%d\t%d\n",node.row,node.col,node.value) } //存盘 //读盘 -> //稀疏数组 -> 原始数组 //读取稀疏数组的第一个节点 val newNode = sparseArr(0) val rowSize2 = newNode.row val colSize2 = newNode.col val chessMap2 = Array.ofDim[Int](rowSize2,colSize2) for (i <- 1 until sparseArr.length){ val node = sparseArr(i) chessMap2(node.row)(node.col) = node.value } println("----从稀疏数组恢复后的数组----") for (item <- chessMap2){ for (item2 <- item){ printf("%d\t",item2) } println() } } } class Node(val row: Int, val col: Int, val value: Int)