java将二维数组转为稀疏数组保存到本地并读取本地文件转为二维数组

简介: java将二维数组转为稀疏数组保存到本地并读取本地文件转为二维数组

package sparsearray;

import java.io.*;

public class SparseArray {

public static void main(String[] args) {
    //创建一个原始的二维数组11*11
    //0表示没有棋子,1表示黑棋,2表示白棋
    int[][] chessArr1 = new int[11][11];
    chessArr1[1][2] = 1;
    chessArr1[2][3] = 2;
    System.out.println("原始二维数组:");
    //遍历二维数组
    for (int[] row : chessArr1) {
        for (int data : row) {
            System.out.printf("%d\t",data);
        }
        System.out.println();
    }
    //统计原始二维数组不为0的的个数
    int count = 0;
    for (int[] row : chessArr1) {
        for (int data : row) {
            if(data != 0) {
                count++;
            }
        }
    }
    System.out.println("原始二维数组不为0的的个数为:"+count);

    //定义稀疏数组
    int[][] sparseArr = new int[count+1][3];

    //稀疏数组第一行的值
    sparseArr[0][0] = chessArr1.length;
    sparseArr[0][1] = chessArr1[0].length;
    sparseArr[0][2] = count;


    //为稀疏数组其他行赋值
    int count2 = 0;//记录是第几个非零的数据
    for (int i = 1;i<chessArr1.length;i++) {
        for (int j = 0;j<chessArr1[0].length;j++) {
            if (chessArr1[i][j]!=0) {
                count2++;
                sparseArr[count2][0] = i;
                sparseArr[count2][1] = j;
                sparseArr[count2][2] = chessArr1[i][j];
            }
        }
    }

    System.out.println("");
    System.out.println("稀疏数组为:");
    //遍历稀疏数组
    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("开始写入文件<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
    //将稀疏数组保存到磁盘E:\java\repos\idea_repos\DataStructures\src\sparsearray\data.txt,文件名为data.txt
    BufferedWriter out =null;
    try {
        out = new BufferedWriter(new FileWriter("E:\\java\\repos\\idea_repos\\DataStructures\\src\\sparsearray\\map.data",true));  //文件写入流
        //将数组中的元素写入文件,每个用tab隔开
        for(int i = 0;i<sparseArr.length;i++) {
            for (int j=0;j<sparseArr[0].length;j++) {
                out.write(sparseArr[i][j]+"\t");
            }
            out.newLine();

// out.write("\r\n");

        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (out!=null) {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("写入文件成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
    /**
     * 读取map.data文件
     */
    BufferedReader br = null;
    int readRow = 0;//记录行数

// String[] temp =null;//读取的数组

    //建新的稀疏数组
    int[][] sparseArr2 = new int[count+1][3];
    try {
        br = new BufferedReader(new FileReader("E:\\java\\repos\\idea_repos\\DataStructures\\src\\sparsearray\\map.data"));
        String line = null;
        //统计行数
        while ((line = br.readLine()) !=null) {
            String[] temp = line.split("\t");
            for (int j = 0;j<temp.length;j++) {
                sparseArr2[readRow][j] = Integer.parseInt(temp[j]);
            }
            readRow++;
        }



    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br!=null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 遍历读取的稀疏数组
     */
    System.out.println("从磁盘读取的稀疏数组为:");
    for (int i = 0;i<sparseArr2.length;i++) {
        System.out.printf("%d\t%d\t%d\t\n",sparseArr2[i][0],sparseArr2[i][1],sparseArr2[i][2]);
    }

    /**
     * 将稀疏数组转为二维数组
     */
    //根据稀疏数组创建二维数组
    int[][] chessArr2 = new int[sparseArr2[0][0]][sparseArr2[0][1]];

    //为二维数组赋值
    for(int i = 1; i < sparseArr2.length; i++) {
        chessArr2[sparseArr2[i][0]][sparseArr2[i][1]] = sparseArr2[i][2];
    }
    System.out.println();
    System.out.println("转换后的新的二维数组为:");
    //输出新的二维数组
    for (int[] row : chessArr2) {
        for (int data : row) {
            System.out.printf("%d\t",data);
        }
        System.out.println();
    }
}

}

目录
相关文章
|
3天前
|
存储 Java 计算机视觉
Java二维数组的使用技巧与实例解析
本文详细介绍了Java中二维数组的使用方法
26 15
|
5天前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
5天前
|
存储 Java 索引
Java基础(六):数组
Java基础(六):数组
Java基础(六):数组
|
3天前
|
存储 Java C++
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
30 12
|
3月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
42 4
|
3月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
52 2
|
3月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
115 2
|
3月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
45 0
|
18天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
80 17
|
28天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者

热门文章

最新文章