最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 輕松實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組互轉(zhuǎn)

 更新時(shí)間:2022年04月08日 15:52:42   作者:汪汪程序員  
在某些應(yīng)用場(chǎng)景中需要大量的二維數(shù)組來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ),但是二維數(shù)組中卻有著大量的無(wú)用的位置占據(jù)著內(nèi)存空間,稀疏數(shù)組就是為了優(yōu)化二維數(shù)組,節(jié)省內(nèi)存空間

二維數(shù)組

二維數(shù)組本質(zhì)上是以數(shù)組作為數(shù)組元素的數(shù)組,即“數(shù)組的數(shù)組”,類型說(shuō)明符 數(shù)組名[常量表達(dá)式][常量表達(dá)式]。二維數(shù)組又稱為矩陣,行列數(shù)相等的矩陣稱為方陣。對(duì)稱矩陣a[i][j] = a[j][i],對(duì)角矩陣:n階方陣主對(duì)角線外都是零元素。

稀疏數(shù)組

1、稀疏算法的基本介紹

當(dāng)一個(gè)數(shù)組中大部分元素為0,或者為同一個(gè)值的數(shù)組時(shí),可以使用稀疏數(shù)組來(lái)保存該數(shù)組。從而減少計(jì)算機(jī)不必要的內(nèi)存開銷。

2、稀疏算法的處理方式

(1)數(shù)組中第一行記錄原始數(shù)組中一共有幾行幾列,有多少個(gè)不同的值。
(2)把具有不同值的元素的行列及值記錄在一個(gè)小規(guī)模的數(shù)組中,從而縮小程序的規(guī)模。

二維數(shù)組轉(zhuǎn)稀疏數(shù)組的思路

  • 遍歷原始的二維數(shù)組,得到有效數(shù)據(jù)的個(gè)數(shù)sum,根據(jù)sum就可以創(chuàng)建稀疏數(shù)組sparseArr int[sum+1][3]
  • 將二維數(shù)組的有效數(shù)據(jù)存入到稀疏數(shù)組

稀疏數(shù)組轉(zhuǎn)原始的二維數(shù)組的思路:

  • 先讀取稀疏數(shù)組的第一行,根據(jù)第一行的數(shù)據(jù),創(chuàng)建原始的二維數(shù)組,比如上面的chessArr2=int[11][11]
  • 再讀取稀疏數(shù)組后幾行的數(shù)據(jù),并賦給原始的二維數(shù)組即可

寫一個(gè)二維數(shù)組:

//1.創(chuàng)建一個(gè)二維數(shù)組
int chessArr1[][]=new int[11][11];
//2.給二維數(shù)組賦值
chessArr1[1][2]=1;
chessArr1[2][3]=2;
//3.雙重for循環(huán)輸出二維數(shù)組
System.out.println("原始的二維數(shù)組:");
for (int[] row : chessArr1) {
    for (int data : row) {
        System.out.printf("%d\t",data);
    }
    //每輸出完一個(gè)一重?cái)?shù)組換一行
    System.out.println();
}

將二維數(shù)組換換位稀疏數(shù)組

//將二維數(shù)組轉(zhuǎn)稀疏數(shù)組
//1.先遍歷二維數(shù)組,得到非0數(shù)據(jù)的個(gè)數(shù),知道數(shù)據(jù)個(gè)數(shù),就可以創(chuàng)建稀疏數(shù)組(知道了稀疏數(shù)組的行)
int sum=0;
for (int i = 0; i < 11; i++) {
    for (int j = 0; j < 11; j++) {
        if (chessArr1[i][j]!=0){
            sum++;
        }
    }
}
System.out.println("有效值的個(gè)數(shù)為:"+sum);
//2.創(chuàng)立對(duì)應(yīng)的稀疏數(shù)組
int sparseArr[][]=new int[sum+1][3];
//3.給稀疏數(shù)組賦值
sparseArr[0][0]=11;
sparseArr[0][1]=11;
sparseArr[0][2]=sum;
//4.遍歷二維數(shù)組,給稀疏數(shù)組
int count=0;//用于記錄是第幾行
for (int i = 0; i < 11; i++) {
    for (int j = 0; j < 11; j++) {
        if (chessArr1[i][j]!=0){
            sparseArr[count+1][0]=i;
            sparseArr[count+1][1]=j;
            sparseArr[count+1][2]=chessArr1[i][j];
            count++;
        }
    }
}
//5.輸出稀疏數(shù)組
//以下是兩種遍歷方式:
/*for (int[] ints : sparseArr) {
    for (int anInt : ints) {
        System.out.printf("%d\t",anInt);
    }
    //把一個(gè)數(shù)組遍歷完之后換一行
    System.out.println();
}*/
System.out.println("得到稀疏數(shù)組為~~~~~");
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]);
}

將稀疏數(shù)組還原為二維數(shù)組

//把稀疏數(shù)組還原為二維數(shù)組
//1.創(chuàng)建二維數(shù)組
int chessArr2[][]=new int[sparseArr[0][0]][sparseArr[0][1]];
//2.給二維數(shù)組賦值
for (int i = 1; i < sparseArr.length; i++) {
    chessArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
}
//3.輸出二維數(shù)組
for (int[] row : chessArr2) {
    for (int data : row) {
        System.out.printf("%d\t",data);
    }
    System.out.println();
}

樹越是向往高處的光亮,它的根就越要向下,向泥土向黑暗的深處。

到此這篇關(guān)于Java 輕松實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組互轉(zhuǎn)的文章就介紹到這了,更多相關(guān)Java 數(shù)組轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Jmeter進(jìn)行http接口測(cè)試的詳細(xì)流程

    使用Jmeter進(jìn)行http接口測(cè)試的詳細(xì)流程

    本文主要針對(duì)http接口進(jìn)行測(cè)試,使用Jmeter工具實(shí)現(xiàn),  Jmter工具設(shè)計(jì)之初是用于做性能測(cè)試的,它在實(shí)現(xiàn)對(duì)各種接口的調(diào)用方面已經(jīng)做的比較成熟,因此,本次直接使用Jmeter工具來(lái)完成對(duì)Http接口的測(cè)試,需要的朋友可以參考下
    2024-12-12
  • springMVC實(shí)現(xiàn)文件上傳和下載

    springMVC實(shí)現(xiàn)文件上傳和下載

    這篇文章主要為大家詳細(xì)介紹了springMVC實(shí)現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 基于Jenkins搭建.NET FrameWork持續(xù)集成環(huán)境

    基于Jenkins搭建.NET FrameWork持續(xù)集成環(huán)境

    這篇文章主要介紹了基于Jenkins搭建.NET FrameWork持續(xù)集成環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • IDEA安裝lombok插件設(shè)置Enable Annotation Processing后編譯依然報(bào)錯(cuò)解決方法

    IDEA安裝lombok插件設(shè)置Enable Annotation Processing后編譯依然報(bào)錯(cuò)解決方法

    這篇文章主要介紹了IDEA安裝lombok插件設(shè)置Enable Annotation Processing后編譯依然報(bào)錯(cuò)解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • java使用dom4j生成與解析xml文檔的方法示例

    java使用dom4j生成與解析xml文檔的方法示例

    這篇文章主要介紹了java使用dom4j生成與解析xml文檔的方法,結(jié)合實(shí)例形式分析了java基于dom4j操作xml節(jié)點(diǎn)生成xml文檔以及解析xml文檔的相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • ElasticSearch學(xué)習(xí)之ES Mapping實(shí)戰(zhàn)示例

    ElasticSearch學(xué)習(xí)之ES Mapping實(shí)戰(zhàn)示例

    這篇文章主要為大家介紹了ElasticSearch學(xué)習(xí)之ES Mapping實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Lombok中@Builder和@SuperBuilder注解的用法案例

    Lombok中@Builder和@SuperBuilder注解的用法案例

    @Builder?是?lombok?中的注解,可以使用builder()構(gòu)造的Person.PersonBuilder對(duì)象進(jìn)行鏈?zhǔn)秸{(diào)用,給所有屬性依次賦值,這篇文章主要介紹了Lombok中@Builder和@SuperBuilder注解的用法,需要的朋友可以參考下
    2023-01-01
  • Jenkins使用Gradle編譯Android項(xiàng)目詳解

    Jenkins使用Gradle編譯Android項(xiàng)目詳解

    這篇文章主要介紹了Jenkins使用Gradle編譯Android項(xiàng)目詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • mybatis.type-aliases-package的作用及用法說(shuō)明

    mybatis.type-aliases-package的作用及用法說(shuō)明

    這篇文章主要介紹了mybatis.type-aliases-package的作用及用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 在Java與Kotlin之間如何進(jìn)行互操作詳解

    在Java與Kotlin之間如何進(jìn)行互操作詳解

    這篇文章主要給大家介紹了關(guān)于在Java和Kotlin之間如何進(jìn)行互操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論

穆棱市| 天祝| 古蔺县| 中宁县| 新干县| 衢州市| 益阳市| 邯郸市| 古交市| 灌南县| 红桥区| 甘德县| 平陆县| 托克逊县| 宜君县| 神池县| 长顺县| 抚州市| 清涧县| 上蔡县| 大关县| 当阳市| 河曲县| 满洲里市| 东莞市| 昌江| 大田县| 大田县| 阜新市| 灵丘县| 武定县| 黔西| 唐山市| 威信县| 镇康县| 万年县| 织金县| 邓州市| 盱眙县| 阿克| 镇雄县|