欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

稀疏数组与普通数组的转化,将数组存进文件与从文件中读取出来

程序员文章站 2022-04-21 10:58:04
稀疏数组稀疏数组的出现有利于一些特殊场景,在一些重复数组比较多的情况下他避免了空间的浪费,只将有用的数据保存起来。private static void test1() {// 先建一个原始数组11行11列int[][] chessArr = new int[11][11];// 存入两个数据chessArr[3][4] = 1;chessArr[2][5] = 2;// 声明变量int sum = 0;// 输出原始数组for (int[] ro...

稀疏数组

稀疏数组的出现有利于一些特殊场景,在一些重复数组比较多的情况下他避免了空间的浪费,只将有用的数据保存起来。
稀疏数组与普通数组的转化,将数组存进文件与从文件中读取出来

1.只是稀疏数组与普通数组的转化
 private static void test1() { // 先建一个原始数组11行11列 int[][] chessArr = new int[11][11]; // 存入两个数据 chessArr[3][4] = 1; chessArr[2][5] = 2; // 声明变量 int sum = 0; // 输出原始数组 for (int[] row : chessArr) { for (int data : row) { System.out.print(data + " "); } System.out.println(); } //找到数组类所有非0的数字的个数 for (int[] row : chessArr) { for (int data : row) { if (data != 0) { sum++; } } } System.out.println("sum="+sum); //创建稀疏数组 //行数为sum+1,列数为3 //第一列存原数组的行号,第二列存原数组的列号,第三列存原数组的数值 //稀疏数组第一行为特例,分别存的是原数组的总行数与总列数与总有效数字的个数。 int[][] arr = new int[sum + 1][3]; arr[0][0] = 11; arr[0][1] = 11; arr[0][2] = sum; //声明一个计数变量 int number = 0; //将原数组里面的有效数值(非0)的行号、列号、数值存进稀疏数组里 for (int i = 0; i < chessArr.length; i++) { for (int j = 0; j < chessArr[i].length; j++) { if (chessArr[i][j] != 0) { //先加1,后加值,意思是从第二行开始存数据 number++; //行号 arr[number][0] = i; //列号 arr[number][1] = j; //数值 arr[number][2] = chessArr[i][j]; } } } //打印这个稀疏数组 for (int[] row : arr) { for (int data : row) { if (data > 9) { System.out.print(data + " "); } else { System.out.print(data + "  "); } } System.out.println(); } //由稀疏数组转为原数组 //先获取原数组的长度与宽度 int[][] arr1 = new int[arr[0][0]][arr[0][1]]; for (int i = 1; i < arr.length; i++) { arr1[arr[i][0]][arr[i][1]] = arr[i][2]; } //打印原来的数组 for (int[] row : arr1) { for (int data : row) { System.out.print(data + " "); } System.out.println(); } } 
2.稀疏数组与普通数组的转化与,以及存进文件与从文件中读取出来(附加了对文件的操作)
package com.etime03; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Test01 { public static void main(String[] args) { // 从文件中读取稀疏数组并转化为正常二维数组。 test2(); // 将普通数组转化为稀疏数组存入文件中 // test1(); } private static void test1() { // 先建一个原始数组11行11列 int[][] chessArr = new int[11][11]; // 存入两个数据 chessArr[3][4] = 1; chessArr[2][5] = 2; // 声明变量 int sum = 0; // 输出原始数组 for (int[] row : chessArr) { for (int data : row) { System.out.print(data + " "); } System.out.println(); } // 找到数组类所有非0的数字的个数 for (int[] row : chessArr) { for (int data : row) { if (data != 0) { sum++; } } } System.out.println("sum=" + sum); // 创建稀疏数组 // 行数为sum+1,列数为3 // 第一列存原数组的行号,第二列存原数组的列号,第三列存原数组的数值 // 稀疏数组第一行为特例,分别存的是原数组的总行数与总列数与总有效数字的个数。 int[][] arr = new int[sum + 1][3]; arr[0][0] = 11; arr[0][1] = 11; arr[0][2] = sum; // 声明一个计数变量 int number = 0; // 将原数组里面的有效数值(非0)的行号、列号、数值存进稀疏数组里 for (int i = 0; i < chessArr.length; i++) { for (int j = 0; j < chessArr[i].length; j++) { if (chessArr[i][j] != 0) { // 先加1,后加值,意思是从第二行开始存数据 number++; // 行号 arr[number][0] = i; // 列号 arr[number][1] = j; // 数值 arr[number][2] = chessArr[i][j]; } } } // 打印这个稀疏数组 for (int[] row : arr) { for (int data : row) { if (data > 9) { System.out.print(data + " "); } else { System.out.print(data + "  "); } } System.out.println(); } // 将稀疏数组存放在文件里面 BufferedWriter bufferedWriter = null; try { bufferedWriter = new BufferedWriter(new FileWriter("D:\\arr.txt")); for (int[] row : arr) { for (int i = 0; i < row.length; i++) { bufferedWriter.write(String.valueOf(row[i]) + " "); } bufferedWriter.newLine(); } } catch (IOException e) { e.printStackTrace(); } finally { if (bufferedWriter != null) { try { bufferedWriter.close(); } catch (IOException e) { e.printStackTrace(); } } bufferedWriter = null; } } private static void test2() { // 将稀疏数组从文件中取出来 BufferedReader bufferedReader = null; BufferedReader bufferedReader1 = null; try { bufferedReader = new BufferedReader(new FileReader("D:\\arr.txt")); String line; int j = 0; // 计算有多少行 while ((line = bufferedReader.readLine()) != null) { j++; } bufferedReader1 = new BufferedReader(new FileReader("D:\\arr.txt")); // 先一行行的读出来,在用split利用空格来劈开 int[][] arr = new int[j][3]; // 声明用来对行数与列数的计数变量 int number1 = 0; int number2 = 0; while ((line = bufferedReader1.readLine()) != null) { String[] split = line.split(" "); for (String row : split) { // 将被劈开的字符串类型的数组挨着传入一个int类型的数组里面 arr[number1][number2] = Integer.parseInt(row); number2++; } // 清空每列的数值让他保持0,1,2 number2 = 0; // 每次大循环增加他的行数 number1++; } // 由稀疏数组转为原数组 // 先获取原数组的长度与宽度 int[][] arr1 = new int[arr[0][0]][arr[0][1]]; for (int i = 1; i < arr.length; i++) { arr1[arr[i][0]][arr[i][1]] = arr[i][2]; } // 打印原来的数组 for (int[] row : arr1) { for (int data : row) { System.out.print(data + " "); } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } bufferedReader = null; if (bufferedReader1 != null) { try { bufferedReader1.close(); } catch (IOException e) { e.printStackTrace(); } } bufferedReader1 = null; } } } 

稀疏数组与普通数组的转化,将数组存进文件与从文件中读取出来
稀疏数组与普通数组的转化,将数组存进文件与从文件中读取出来

本文地址:https://blog.csdn.net/qq_49249150/article/details/107677585