2023-11-24
思路:
将数组转为稀疏数组存入文件/数据库,用的时候再取出来
稀疏数组3列:行,列,值 第一行记录原数组 行数,列数,以及存入的总值
public class SparseArray_01 { public static void main(String[] args) { //稀疏数组 基本转换 System.out.println("==========二维-》稀疏=========="); int[][] ins=new int[10][10]; ins[1][2]=1; ins[2][4]=2; for (int i = 0; i < ins.length; i++) { for (int j = 0; j < ins[0].length; j++) { System.out.print(ins[i][j]+"\t"); } System.out.println(); } int count=0;//记录有效数据个数 for (int i = 0; i < ins.length; i++) { for (int j = 0; j < ins[0].length; j++) { if(ins[i][j]!=0){ count++; } } } System.out.println("有效数据有:"+count+"个"); int[][] xisu=new int[count+1][3];//创建稀疏数组 //稀疏数组都一行赋初值 xisu[0][0]= ins.length; xisu[0][1]= ins[0].length; xisu[0][2]= count; //再次遍历存入稀疏数组 int k=1;//记录稀疏数组到哪了 以及最后总长度 for (int i = 0; i < ins.length; i++) { for (int j = 0; j < ins[0].length; j++) { if(ins[i][j]!=0){ xisu[k][0]= i; xisu[k][1]= j; xisu[k][2]= ins[i][j]; k++; } } } if(k!=count+1){ System.out.println("error"); } //遍历稀疏数组 for (int i = 0; i < xisu[0].length; i++) { for (int j = 0; j <3; j++) { System.out.print(xisu[i][j]+"\t"); } System.out.println(); } System.out.println("==========稀疏-》二维=========="); int[][] newIns=new int[ xisu[0][0] ][ xisu[0][1] ]; for (int i = 1; i < xisu.length; i++) { //这里注意是从1开始的 newIns[ xisu[i][0] ][ xisu[i][1] ]= xisu[i][2]; } for (int i = 0; i < newIns.length; i++) { for (int j = 0; j < newIns[0].length; j++) { System.out.print(newIns[i][j]+"\t"); } System.out.println(); } } }
public class SparseArray_02 { public static void main(String[] args) throws Exception { //将稀疏数组写入文件,并读出 int[][] xisu=new int[3][3]; xisu[0][0]=10; xisu[0][1]=10; xisu[0][2]=2; xisu[1][0]=1; xisu[1][1]=2; xisu[1][2]=1; xisu[2][0]=2; xisu[2][1]=4; xisu[2][2]=2; for (int i = 0; i < xisu.length; i++) { for (int j = 0; j < xisu[0].length; j++) { System.out.print(xisu[i][j]+"\t"); } System.out.println(); } System.out.println("=========写入========="); FileWriter fw=new FileWriter("src\\XiSuShuZu\\sparse.txt"); for (int i = 0; i < xisu.length; i++) { for (int j = 0; j < xisu[0].length; j++) { fw.write(xisu[i][j]+"\t");//单独加数字有问题 } fw.write("\n"); } fw.close(); System.out.println("=========读取========="); FileReader fr=new FileReader("src//XiSuShuZu//sparse.txt"); //扩展一点:读取不知道行,列数,怎么读? //读取一个文件/数据库一定是知道大致结构的,不然没有一点意义 ,所以不要用列表 //像现在这个情况就是知道是 3列,不知道具体多少行 //但是Java动态二维数组只能是行确定,所以行列的意义要换一下 // 不行,试过了,动态添加,数组怎么都不行 //必须先读取一遍,看有多少行,而且因为这个流没有刷新方法,只能看一下x未多少 BufferedReader brd=new BufferedReader(fr); /* int x=0; while((brd.readLine())!=null){ x++; } System.out.println(x);//x是3 */ int[][] newXiSu=new int[3][3];//x=3 String str; int y=0; while((str=brd.readLine())!=null){ String[] strings = str.split("\t"); newXiSu[y][0]=Integer.parseInt(strings[0]); newXiSu[y][1]=Integer.parseInt(strings[1]); newXiSu[y][2]=Integer.parseInt(strings[2]); y++; } for (int i = 0; i < newXiSu.length; i++) { for (int j = 0; j < newXiSu[0].length; j++) { System.out.print(newXiSu[i][j]+"\t"); } System.out.println(); } brd.close(); fr.close(); } }
标签:System,xisu,int,++,稀疏,精选,length,数组,ins From: https://www.cnblogs.com/youye9527/p/17854925.html