欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解

 更新時間:2021年10月13日 14:19:57   作者:葉綠體不忘呼吸  
稀疏數(shù)組是用于優(yōu)化,壓縮具有以下特點的二維數(shù)組:當二維數(shù)組中的元素大部分相同,有意義的數(shù)據(jù)元素較少時,可以使用稀疏數(shù)組進行簡化,節(jié)省存儲空間

基本介紹

當一個數(shù)組中大部分元素為0,或者為同一個值的數(shù)組時,可以使用稀疏數(shù)組來保存該數(shù)組。

稀疏數(shù)組的處理方法是:
①記錄數(shù)組一共有幾行幾列,有多少個不同的值(0除外)。
②把具有不同值的元素的行列及值記錄在一個小規(guī)模的數(shù)組中,從而縮小程序的規(guī)模。

在這里插入圖片描述

二維數(shù)組轉(zhuǎn)稀疏數(shù)組:
①遍歷原始的二維數(shù)組,得到有效數(shù)據(jù)的個數(shù) sum(除0外不同值)
②根據(jù) sum 創(chuàng)建稀疏數(shù)組 sparseArr int[sum+1][3]
③將二維數(shù)組的有效數(shù)據(jù)數(shù)據(jù)存入到稀疏數(shù)組
(稀疏數(shù)組的第一行,三列分別記錄二維數(shù)組的行、列、有效數(shù)據(jù)個數(shù))
(后面的行記錄有效數(shù)據(jù)元素,三列分別記錄行、列、有效數(shù)據(jù)元素值)

稀疏數(shù)組轉(zhuǎn)二維數(shù)組:
①先讀取稀疏數(shù)組的第一行,根據(jù)第一行的數(shù)據(jù),創(chuàng)建原始的二維數(shù)組
②再讀取稀疏數(shù)組后幾行的數(shù)據(jù),并賦給原始的二維數(shù)組即可

應(yīng)用實例

使用稀疏數(shù)組,來保留二維數(shù)組(棋盤、地圖等等),把稀疏數(shù)組存盤,并且可以重新恢復為原來的二維數(shù)組數(shù)。

如下為一個棋盤通過二維數(shù)組轉(zhuǎn)換為稀疏數(shù)組加以存盤和復盤:

在這里插入圖片描述

1、創(chuàng)建原始二維數(shù)組并輸出

		//創(chuàng)建一個原始的二維數(shù)組11*11,0表示無子,1表示黑子,2表示藍子
        int[][] chessArr1 = new int[11][11];
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
        //輸出原始二維數(shù)組
        for (int[] row : chessArr1){
            for (int data : row){
                System.out.print(data + "\t");
            }
            System.out.println();
        }

在這里插入圖片描述

2、將二維數(shù)組轉(zhuǎn)換為稀疏數(shù)組

		//將二維數(shù)組轉(zhuǎn)換為稀疏數(shù)組
        //先遍歷二維數(shù)組,得到非0數(shù)據(jù)的個數(shù)
        int sum = 0;
        for (int i = 0; i < chessArr1.length; i++) {
            for (int j = 0; j < chessArr1[i].length; j++) {
                if (chessArr1[i][j] != 0) sum++;
            }
        }
        //創(chuàng)建對應(yīng)的稀疏數(shù)組并賦值
        int[][] sparseArr = new int[sum + 1][3];
        sparseArr[0][0] = 11;
        sparseArr[0][1] = 11;
        sparseArr[0][2] = sum;
        int count = 0; //用于記錄賦值到第幾行
        for (int i = 0; i < chessArr1.length; i++) {
            for (int j = 0; j < chessArr1[i].length; j++) {
                if (chessArr1[i][j] != 0) {
                    count++;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr1[i][j];
                }
            }
        }
        //輸出稀疏數(shù)組
        for (int[] row : sparseArr){
            for (int data : row){
                System.out.print(data + "\t");
            }
            System.out.println();
        }

在這里插入圖片描述

3、將稀疏數(shù)組轉(zhuǎn)回二維數(shù)組

        //將稀疏數(shù)組轉(zhuǎn)換為二維數(shù)組
        int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
        //讀取賦值
        for (int i = 1; i < sparseArr.length; i++) {
            chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        //輸出
        for (int[] row : chessArr2){
            for (int data : row){
                System.out.print(data + "\t");
            }
            System.out.println();
        }

在這里插入圖片描述

到此這篇關(guān)于Java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解的文章就介紹到這了,更多相關(guān)Java 稀疏數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計模式初識之備忘錄模式詳解

    Java設(shè)計模式初識之備忘錄模式詳解

    備忘錄設(shè)計模式(Memento Design Pattern)也叫作快照(Snapshot)模式,主要用于實現(xiàn)防丟失、撤銷、恢復等功能。本文將通過示例為大家介紹一些備忘錄模式的定義與使用,需要的可以參考一下
    2022-11-11
  • 一篇文章帶你了解Java基礎(chǔ)-多態(tài)

    一篇文章帶你了解Java基礎(chǔ)-多態(tài)

    這篇文章主要介紹了Java 多態(tài)的深入理解的相關(guān)資料,子類繼承父類的特征和行為,使得子類具有父類的各種屬性和方法。或子類從父類繼承方法,使得子類具有父類相同的行為,需要的朋友可以參考下
    2021-08-08
  • SpringBoot實戰(zhàn)項目之谷歌瀏覽器全屏效果實現(xiàn)

    SpringBoot實戰(zhàn)項目之谷歌瀏覽器全屏效果實現(xiàn)

    這篇文章主要介紹了通過 Java SpringBoot來實現(xiàn)谷歌瀏覽器的全屏效果,希望頁面展示時可以實現(xiàn)全屏效果以提高用戶體驗。感興趣的小伙伴跟著小編往下看吧
    2021-09-09
  • Spring?Bean獲取方式的實例化方式詳解

    Spring?Bean獲取方式的實例化方式詳解

    工作中需要對一個原本加載屬性文件的工具類修改成對數(shù)據(jù)庫的操作當然,ado層已經(jīng)寫好,但是需要從Spring中獲取bean,然而,工具類并沒有交給Spring來管理,所以需要通過方法獲取所需要的bean。于是整理了Spring獲取bean的幾種方法
    2023-03-03
  • Java實現(xiàn)的微信公眾號獲取微信用戶信息示例

    Java實現(xiàn)的微信公眾號獲取微信用戶信息示例

    這篇文章主要介紹了Java實現(xiàn)的微信公眾號獲取微信用戶信息,結(jié)合實例形式分析了Java微信公眾號獲取微信用戶信息相關(guān)原理、步驟與操作注意事項,需要的朋友可以參考下
    2019-10-10
  • springboot+thymeleaf+layui的實現(xiàn)示例

    springboot+thymeleaf+layui的實現(xiàn)示例

    本文主要介紹了springboot+thymeleaf+layui的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • 一文秒懂Java enum常見的用法講解

    一文秒懂Java enum常見的用法講解

    這篇文章主要介紹了一文秒懂Java enum常見的用法講解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java?輕松掌握字符緩沖流的使用

    Java?輕松掌握字符緩沖流的使用

    這篇文章主要介紹了Java的字符緩沖流用法,字符緩沖流的用途很多,主要是幾個構(gòu)造方法的使用,在項目開發(fā)中經(jīng)常會用到,需要的朋友參考下吧
    2022-04-04
  • Spring切入點表達式配置過程圖解

    Spring切入點表達式配置過程圖解

    這篇文章主要介紹了Spring切入點表達式配置過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot項目啟動時增加自定義Banner的簡單方法

    SpringBoot項目啟動時增加自定義Banner的簡單方法

    最近看到springboot可以自定義啟動時的banner,然后自己試了一下,下面這篇文章主要給大家介紹了SpringBoot項目啟動時增加自定義Banner的簡單方法,需要的朋友可以參考下
    2022-01-01

最新評論