Java教程

稀疏数组

本文主要是介绍稀疏数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

稀疏数组

#当一个数组中大部分元素为同一值时的时候使用

#处理方式:

1.记录数组一共有几行几列,有多少个不同的值

2.把不同值的元素和行列以及值记录在小规模的一个数组中

3.稀疏数组占用内存小,减少IO的运算时间增加效率

public class AaaayDome08 {
    public static void main(String[] args) {
        //创建一个原始二维数组 11*11 0:没有棋子  1:黑棋  2:白棋
        int[][] arrays = new int[11][11];
        arrays[1][2]= 1;
        arrays[2][4]= 2;
        arrays[5][4]= 1;
        arrays[6][7]= 2;
​
        //输出原始数组
        for (int[] ints : arrays) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        //转换为稀疏数组保存并获取有效值的个数
        int sum = 0;
        for (int i = 0; i < arrays.length; i++) {
            for (int j = 0; j < arrays[i].length; j++) {
                if (arrays[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效值的个数为:"+sum);
        //创建一个稀疏数组的数组、打印出表头
        int[][] arrays2 = new int[sum+1][3];
        arrays2[0][0]= 11;
        arrays2[0][1]= 11;
        arrays2[0][2]= sum;
        //sum+1:sum是有效值的多少就打印多少行,+1是第一行是要打印行、列、值
        //3列是固定的
​
        //遍历二维数组,将非零的值,存放在稀疏数组中
        //count代表非0的数
        int count = 0;
        for (int i = 0; i < arrays.length; i++) {
            for (int j = 0; j < arrays[i].length; j++) {
                if (arrays[i][j]!=0){
                    count++;
                    arrays2[count][0]=i;//行
                    arrays2[count][1]=j;//列
                    arrays2[count][2]=arrays[i][j];//值
                }
            }
        }
        //输出稀疏数组
        for (int[] ints : arrays2) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        //还原稀疏数组
        // 1.先创建一个新数组来读取稀疏数组
        int[][] arrays3 = new int[11][11];
        //2.给其中的元素还原它的值
        for (int i = 1; i < arrays2.length; i++) {
            arrays3[arrays2[i][0]][arrays2[i][1]]= arrays2[i][2];
        }
        //打印还原的数组
        for (int[] ints : arrays3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}
//D:\Java\jdk1.8.0\bin\java.exe
//0    0  0  0  0  0  0  0  0  0  0
//0    0  1  0  0  0  0  0  0  0  0
//0    0  0  0  2  0  0  0  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//0    0  0  0  1  0  0  0  0  0  0
//0    0  0  0  0  0  0  2  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//有效值的个数为:4
//11   11 4
//1    2  1
//2    4  2
//5    4  1
//6    7  2
//0    0  0  0  0  0  0  0  0  0  0
//0    0  1  0  0  0  0  0  0  0  0
//0    0  0  0  2  0  0  0  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//0    0  0  0  1  0  0  0  0  0  0
//0    0  0  0  0  0  0  2  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//0    0  0  0  0  0  0  0  0  0  0
//
//Process finished with exit code 0
这篇关于稀疏数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!