稀疏数组的基本实现

使用场景:

        当一个表格中出现大量相同数字的时候,可以使用稀疏数组来保存数组,以此来节省内存的占用空间。(棋盘,地图等等)

基本思路:

//将原始矩阵转化为稀疏矩阵并存入磁盘中

        1.遍历原始矩阵,记录有效数值的个数sum

        2.创建一个(sum+1)行,3列的稀疏矩阵

        3.遍历原始矩阵,将有效数值的行列和对应的数值存入稀疏矩阵中

        4.将稀疏矩阵读入磁盘中

//从磁盘中读取稀疏矩阵,并转化为原始矩阵

        1.从磁盘中读取信息并转为为稀疏矩阵

        2.读取稀疏矩阵的第一行数据创建原始矩阵

        3.从稀疏矩阵的第二行开始,依次读取数值到原始矩阵中

代码实现

package sparsearray;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class sparsearray {
	public static void main(String[] args) throws Exception{
		System.out.println("二维数组");
		int[][] array1=new int[6][6];
		array1[1][1]=2;
		array1[2][2]=3;
		int sum=0;
		for(int[] row:array1){
			for(int col:row){
				System.out.print(col+"\t");
			}
			System.out.println();
		}
		for(int i=0;i<6;i++){
			for(int j=0;j<6;j++){
				if(array1[i][j]!=0){
					sum++;
				}
			}
		}
		System.out.println();
		System.out.println("数组有效数字总和");
		System.out.println(sum);
		System.out.println();
		int[][] array2=new int[sum+1][3];
		int count=0;
		array2[0][0]=6;array2[0][1]=6;array2[0][2]=sum;
		for(int i=0;i<6;i++){
			for(int j=0;j<6;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[] row:array2){
			for(int data:row){
				System.out.print(data+"\t");
			}
			System.out.println();
		}
		System.out.println("将稀疏列表存入磁盘");
		File file=new File("D:\\eclipse\\sparsearray\\array.data");
		FileOutputStream fileoutputstrea = new FileOutputStream(file);
		OutputStreamWriter writer=new OutputStreamWriter(fileoutputstrea,"utf-8");
		for(int i=0;i<array2.length;i++){
			if(i==array2.length-1){
				writer.write(array2[i][0]+","+array2[i][1]+","+array2[i][2]);
			}else{
				writer.write(array2[i][0]+","+array2[i][1]+","+array2[i][2]+",");
			}
		}
		writer.close();
		fileoutputstrea.close();
		System.out.println("稀疏数组存入磁盘完毕");
		System.out.println();
		System.out.println("从磁盘中读取数据");
		FileInputStream inputStream=new FileInputStream(file);
		InputStreamReader reader=new InputStreamReader(inputStream,"utf-8");
		StringBuffer sb=new StringBuffer();
		while(reader.ready()){
			sb.append((char)reader.read());
		}
		System.out.println("读出的文件为:"+sb.toString());
		reader.close();
		inputStream.close();
		String[] str=sb.toString().split(",");
		System.out.println("稀疏矩阵有:"+str.length/3+"行数据");
		int[][] array3=new int[sum+1][str.length/3];
		int k= 0;
		for (String  s:str) {
			System.out.print(k%3+"\t");
			array3[k/3][k%3] =Integer.parseInt(s);
			k++;
		}
		System.out.println();
		System.out.println("稀疏数组转二维数组");
		int[][] array4=new int[array3[0][0]][array3[0][1]];
		
		for(int i=1;i<=sum;i++){
			array4[array3[i][0]][array3[i][1]]=array3[i][2];
		}
		
		for(int i=0;i<array4.length;i++){
			for(int j=0;j<array4[0].length;j++){
				System.out.print(array4[i][j]+"\t");
			}
			System.out.println();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值