首页天道酬勤二维数组变为一维数组的例子,定义二维数组的三种方式

二维数组变为一维数组的例子,定义二维数组的三种方式

张世龙 05-12 11:03 40次浏览

**

稀疏数组** ##基本介绍:

对于数组中的大多数元素为0或相同值的数组,可以使用稀疏数组保存数组。

稀疏数组的处理方法为:

1 )记录数组共有几行几列,有几个不同的值

2 )将具有不同值的元素矩阵和值记录在一个小数组中,程序规模为http://www.Sina.com/http://www.Sina.com /

package com.zlx.sparseArray; import java.io.*; import java.util.ArrayList; import java.util.List; publicclasssparsearray { publicstaticvoidmain (string [ ] args ) /创建原始二维数组的11*11 //0:表示没有棋子,黑点1 )表示蓝色子intcheschess//在第2行第3列中黑子chessArr1[2][3]=2;//第3行第5列中蓝色子chessArr1[2][5]=1; //第3行第5列为蓝色子//输出源的二维排列//首先为循环扫描行for(int[]row:chessarr1)//循环扫描列for ) int data 3360 row (system.out.printf ) //输出一行换行}//使二维数组为稀疏数组//1,首先遍历二维数组,得到0以外的数据个数int sum=0的for(intI=0; i 11; I ) for(intj=0; j 11; j () if ) chessarr1[I][j]!=0) sum; } } } //2,对应的稀疏数组intsparsearr [ ] [ ]=new int [ sum1] [3]; //稀疏数组行数:不是0的整数个数1列数: 3,即在row/col/val //稀疏数组中代入sparseArr[0][0]=11; //稀疏数组第一行第一列存储:原始数组的行数sparseArr[0][1]=11; //存储稀疏数组的第一行第二列:原始数组的列数sparseArr[0][2]=sum; //定义用于在稀疏阵列的第一行第三列中遍历:元阵列的非零整数个数//原始二维阵列,记录将非零值存储在稀疏阵列sparseArray中//当前第几个非零数据int count=0的计数; for(intI=0; i 11; I ) for(intj=0; j 11; j () if ) chessarr1[I][j]!=0) { count; sparseArr[count][0]=i; sparseArr[count][1]=j; sparse arr [ count ] [2]=chessarr1[ I ] [ j ]; } system.out.println----------------------------------------------------------------。 System.out.println; //如何输出当前稀疏数组1:for(intI=0; i sparseArr.length; I ) for(intj=0; j 3; j ) (system.out.printf('%d\t ',sparseArr[i][j]; } System.out.println (; }

//输出当前稀疏数组 方法2: System.out.println("方法2: "); for (int i = 0; i < sparseArr.length; i++) { System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]); } System.out.println("+++++++++++++++++++++++++++将稀疏数组存入到硬盘中++++++++++++++++++++++++++"); File dest = new File("E:\\sparesArray.data"); //将稀疏数组存入到硬盘中 try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(dest))){ for (int[] row:sparseArr) { for (int data:row) { bufferedWriter.write(data + "\t"); //一行一行存 } bufferedWriter.write("\n"); //注意:BufferedWriter是缓冲输入流,意思是调用BufferedWriter的write方法时候。 // 数据是先写入到缓冲区里,并没有直接写入到目的文件里。必须调用BufferedWriter的flush()方法。 // 这个方法会刷新一下该缓冲流,也就是会把数据写入到目的文件里。 // 或者你可以调用BufferedWriter的close()方法,该方法会在关闭该输入流之前先刷新一下该缓冲流。 // 也会把数据写入到目的文件里。 //如果没有直率的楼房的for()循环中添加 bw.flush(); 这句话, // 在if 的时候重新 new BufferedWriter(); 就把原来bw(缓冲区)中的覆盖掉了。于是就不能写进文件字符。 bufferedWriter.flush(); } } catch (Exception e) { e.printStackTrace(); } //从硬盘中读取稀疏数组并且进行恢复 //获取硬盘中的稀疏数组的行数,并且将其存储到一个list集合中 File src = new File("E:\\sparesArray.data"); BufferedReader bufferedReader = null; List<Integer> list = new ArrayList<>(); try { bufferedReader = new BufferedReader(new FileReader(src)); String line; //java.io.BufferedReader.readline() 用于读取一行文本。遇到换行符或回车符readLine()方法会终止读取。 //readLine()方法读出是null,就表示文件结尾了。 while ((line = bufferedReader.readLine()) != null){ String[] str = line.split("\t"); for (int i = 0; i < str.length; i++) { list.add(Integer.parseInt(str[i])); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(bufferedReader != null){ try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println("list ====>>>> "+list); //打印稀疏数组行数 System.out.println("稀疏数组的行数为: "+list.get(2)+1); //第三个元素代表不为0的元素有多少个,+1代表稀疏数组的行数 //从硬盘读取稀疏数组到内存种的方法二:直接对之前的list进行操作 //创建稀疏数组 int sparseArr2[][]=new int[list.get(2)+1][3]; int m=0; for(int i=0;i<list.size();i=i+3) { sparseArr2[m][0]=list.get(i); sparseArr2[m][1]=list.get(i+1); sparseArr2[m][2]=list.get(i+2); m++; } System.out.println("-----------------从硬盘种读取的稀疏数组---------------------------"); for(int[] row2:sparseArr2) { for(int data:row2) { System.out.printf("%d\t",data); } System.out.println(); } System.out.println("++++++++++++++++++=将稀疏数组转为普通的二维数组+++++++++++++++++++++++++++++"); //将稀疏数组转为普通的二维数组 //1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的 chessArr2 = int [11][11] //2. 在读取稀疏数组后几行的数据,并赋给 原始的二维数组 即可. int chessArr2[][] = new int[sparseArr2[0][0]][sparseArr2[0][1]]; for (int i = 1; i < sparseArr2.length; i++) { //稀疏数组的第2行开始:第一列为原始数组的行 第二列为原始数组的列 第三列为原始数组的值 chessArr2[sparseArr2[i][0]][sparseArr2[i][1]] = sparseArr2[i][2]; } //方法1: for (int i = 0; i < chessArr2.length; i++) { for (int j = 0; j < chessArr2[i].length; j++) { System.out.printf("%d\t",chessArr2[i][j]); } System.out.println(); } }}

输出的结果为:





数据稀疏,js稀疏数组 初始化一个2行3列的二维数组,数据结构多维数组