稀疏数组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 ", 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 %d %d
",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 ",item2)
}
println()
}
}
}
class Node(val row: Int, val col: Int, val value: Int)

