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

Java稀疏數(shù)組詳細(xì)圖文教程

 更新時(shí)間:2023年09月28日 08:23:19   作者:楠枬  
當(dāng)一個(gè)數(shù)組中的大部分元素為相同的值,可使用稀疏數(shù)組來保存該數(shù)組,可以將稀疏數(shù)組看做是普通數(shù)組的壓縮,這篇文章主要給大家介紹了關(guān)于Java稀疏數(shù)組的相關(guān)資料,需要的朋友可以參考下

1.稀疏數(shù)組

稀疏數(shù)組(Sparse Array):當(dāng)一個(gè)數(shù)組中的大部分元素為相同的值,可使用稀疏數(shù)組來保存該數(shù)組,可以將稀疏數(shù)組看做是普通數(shù)組的壓縮

例如

數(shù)組arr中許多值為0,若對(duì)二維數(shù)組直接進(jìn)行存儲(chǔ),則會(huì)存儲(chǔ)許多相同的數(shù)值0,造成空間的浪費(fèi),此時(shí),我們可以用稀疏數(shù)組對(duì)其進(jìn)行存儲(chǔ)

2.稀疏數(shù)組的使用

要對(duì)二維數(shù)組進(jìn)行存儲(chǔ),我們需要知道二維數(shù)組的行和列、不同數(shù)值的數(shù)量以及不同元素的位置和值

稀疏數(shù)組的第一行,存放二維數(shù)組arr的行數(shù)、列數(shù)、不同數(shù)值的數(shù)量sum

 后面幾行,存放不同值元素在二維數(shù)組arr中的行、列、數(shù)值

代碼實(shí)現(xiàn)

創(chuàng)建二維數(shù)組

 int[][] arr = new int[6][5];
 arr[1][0] = 1;
 arr[1][3] = 6;
 arr[4][3] = 2;

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

(1)遍歷二維數(shù)組,確定不同元素的個(gè)數(shù)sum

        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if(arr[i][j] != 0){
                    sum++;
                }
            }
        }

(2)根據(jù)sum創(chuàng)建稀疏數(shù)組

int[][] sparseArr = new int[sum+1][3];

(3) 遍歷二維數(shù)組,對(duì)稀疏數(shù)組進(jìn)行賦值

        //稀疏數(shù)組的第一行分別存放二維數(shù)組的行數(shù)、列數(shù)以及不同元素的個(gè)數(shù)
        sparseArr[0][0] = arr.length;
        sparseArr[0][1] = arr[0].length;
        sparseArr[0][2] = sum;
        //再對(duì)不同元素進(jìn)行存儲(chǔ)
        int k = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if(arr[i][j] != 0){
                    k++;
                    //分別存放不同元素的行、列以及數(shù)值
                    sparseArr[k][0] = i;
                    sparseArr[k][1] = j;
                    sparseArr[k][2] = arr[i][j];
                }
            }
        }

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

(1)創(chuàng)建二維數(shù)組

int[][] arr1 = new int[sparseArr[0][0]][sparseArr[0][1]];

(2)遍歷稀疏數(shù)組, 對(duì)不同值元素進(jìn)行賦值

        //遍歷稀疏數(shù)組,對(duì)不同值元素進(jìn)行賦值
        for (int i = 1; i < sparseArr.length; i++) {
           arr1[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }

完整代碼

public class Test {
    public static void main(String[] args) {
        //創(chuàng)建二維數(shù)組
        int[][] arr = new int[6][5];
        arr[1][0] = 1;
        arr[1][3] = 6;
        arr[4][3] = 2;
        System.out.println("****二維數(shù)組****");
        for (int[] row: arr) {
            for (int data: row) {
                System.out.printf("%d ",data);
            }
            System.out.println();
        }
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if(arr[i][j] != 0){
                    sum++;
                }
            }
        }
        //創(chuàng)建稀疏數(shù)組
        int[][] sparseArr = new int[sum+1][3];
        //稀疏數(shù)組的第一行分別存放二維數(shù)組的行數(shù)、列數(shù)以及不同元素的個(gè)數(shù)
        sparseArr[0][0] = arr.length;
        sparseArr[0][1] = arr[0].length;
        sparseArr[0][2] = sum;
        //再對(duì)不同元素進(jìn)行存儲(chǔ)
        int k = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if(arr[i][j] != 0){
                    k++;
                    //分別存放不同元素的行、列以及數(shù)值
                    sparseArr[k][0] = i;
                    sparseArr[k][1] = j;
                    sparseArr[k][2] = arr[i][j];
                }
            }
        }
        System.out.println("****稀疏數(shù)組****");
        for (int[] row: sparseArr) {
            for (int data: row) {
                System.out.printf("%d ",data);
            }
            System.out.println();
        }
        //創(chuàng)建二維數(shù)組
        int[][] arr1 = new int[sparseArr[0][0]][sparseArr[0][1]];
        //遍歷稀疏數(shù)組,對(duì)不同值元素進(jìn)行賦值
        for (int i = 1; i < sparseArr.length; i++) {
           arr1[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        System.out.println("****二維數(shù)組****");
        for (int[] row: arr1) {
            for (int data: row) {
                System.out.printf("%d ",data);
            }
            System.out.println();
        }
    }
}

運(yùn)行結(jié)果

總結(jié) 

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

相關(guān)文章

  • 詳解Java網(wǎng)絡(luò)編程

    詳解Java網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)編程是指編寫運(yùn)行在多個(gè)設(shè)備(計(jì)算機(jī))的程序,這些設(shè)備都通過網(wǎng)絡(luò)連接起來。本文介紹了一些網(wǎng)絡(luò)編程基礎(chǔ)的概念,并用Java來實(shí)現(xiàn)TCP和UDP的Socket的編程,來讓讀者更好的了解其原理
    2021-06-06
  • Java 為什么要避免使用finalizer和Cleaner

    Java 為什么要避免使用finalizer和Cleaner

    這篇文章主要介紹了Java 為什么要避免使用finalizer和Cleaner,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Java線程狀態(tài)運(yùn)行原理解析

    Java線程狀態(tài)運(yùn)行原理解析

    這篇文章主要介紹了Java線程狀態(tài)運(yùn)行原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • idea創(chuàng)建javaweb原生項(xiàng)目的實(shí)現(xiàn)示例

    idea創(chuàng)建javaweb原生項(xiàng)目的實(shí)現(xiàn)示例

    這篇文章主要介紹了idea創(chuàng)建javaweb原生項(xiàng)目的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • DispatcherServlet處理器的適配和處理解析

    DispatcherServlet處理器的適配和處理解析

    這篇文章主要為大家介紹了DispatcherServlet的處理器的適配和處理流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 詳解springBoot啟動(dòng)時(shí)找不到或無法加載主類解決辦法

    詳解springBoot啟動(dòng)時(shí)找不到或無法加載主類解決辦法

    這篇文章主要介紹了詳解springBoot啟動(dòng)時(shí)找不到或無法加載主類解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 集群環(huán)境中使用ehcache_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    集群環(huán)境中使用ehcache_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了集群環(huán)境中使用ehcache的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • SpringBoot如何整合SpringDataJPA

    SpringBoot如何整合SpringDataJPA

    這篇文章主要介紹了SpringBoot整合SpringDataJPA代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之養(yǎng)老院管理系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之養(yǎng)老院管理系統(tǒng)的實(shí)現(xiàn)

    讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+JSP+Easyui+maven+mysql實(shí)現(xiàn)一個(gè)養(yǎng)老院管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2022-03-03
  • Java ArrayList 實(shí)現(xiàn)實(shí)例講解

    Java ArrayList 實(shí)現(xiàn)實(shí)例講解

    ArrayList是基于數(shù)組實(shí)現(xiàn)的,是一個(gè)動(dòng)態(tài)數(shù)組,其容量能自動(dòng)增長(zhǎng),類似于C語(yǔ)言中的動(dòng)態(tài)申請(qǐng)內(nèi)存,動(dòng)態(tài)增長(zhǎng)內(nèi)存。這篇文章主要介紹了java ArrayList 實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2016-11-11

最新評(píng)論