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

Java稀疏數組詳細圖文教程

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

1.稀疏數組

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

例如

數組arr中許多值為0,若對二維數組直接進行存儲,則會存儲許多相同的數值0,造成空間的浪費,此時,我們可以用稀疏數組對其進行存儲

2.稀疏數組的使用

要對二維數組進行存儲,我們需要知道二維數組的行和列不同數值的數量以及不同元素的位置和值

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

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

代碼實現

創(chuàng)建二維數組

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

2.1 二維數組轉換為稀疏數組

(1)遍歷二維數組,確定不同元素的個數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)根據sum創(chuàng)建稀疏數組

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

(3) 遍歷二維數組,對稀疏數組進行賦值

        //稀疏數組的第一行分別存放二維數組的行數、列數以及不同元素的個數
        sparseArr[0][0] = arr.length;
        sparseArr[0][1] = arr[0].length;
        sparseArr[0][2] = sum;
        //再對不同元素進行存儲
        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++;
                    //分別存放不同元素的行、列以及數值
                    sparseArr[k][0] = i;
                    sparseArr[k][1] = j;
                    sparseArr[k][2] = arr[i][j];
                }
            }
        }

2.2 稀疏數組轉換為二維數組

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

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

(2)遍歷稀疏數組, 對不同值元素進行賦值

        //遍歷稀疏數組,對不同值元素進行賦值
        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)建二維數組
        int[][] arr = new int[6][5];
        arr[1][0] = 1;
        arr[1][3] = 6;
        arr[4][3] = 2;
        System.out.println("****二維數組****");
        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)建稀疏數組
        int[][] sparseArr = new int[sum+1][3];
        //稀疏數組的第一行分別存放二維數組的行數、列數以及不同元素的個數
        sparseArr[0][0] = arr.length;
        sparseArr[0][1] = arr[0].length;
        sparseArr[0][2] = sum;
        //再對不同元素進行存儲
        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++;
                    //分別存放不同元素的行、列以及數值
                    sparseArr[k][0] = i;
                    sparseArr[k][1] = j;
                    sparseArr[k][2] = arr[i][j];
                }
            }
        }
        System.out.println("****稀疏數組****");
        for (int[] row: sparseArr) {
            for (int data: row) {
                System.out.printf("%d ",data);
            }
            System.out.println();
        }
        //創(chuàng)建二維數組
        int[][] arr1 = new int[sparseArr[0][0]][sparseArr[0][1]];
        //遍歷稀疏數組,對不同值元素進行賦值
        for (int i = 1; i < sparseArr.length; i++) {
           arr1[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        System.out.println("****二維數組****");
        for (int[] row: arr1) {
            for (int data: row) {
                System.out.printf("%d ",data);
            }
            System.out.println();
        }
    }
}

運行結果

總結 

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

相關文章

  • 詳解Java網絡編程

    詳解Java網絡編程

    網絡編程是指編寫運行在多個設備(計算機)的程序,這些設備都通過網絡連接起來。本文介紹了一些網絡編程基礎的概念,并用Java來實現TCP和UDP的Socket的編程,來讓讀者更好的了解其原理
    2021-06-06
  • Java 為什么要避免使用finalizer和Cleaner

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

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

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

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

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

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

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

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

    詳解springBoot啟動時找不到或無法加載主類解決辦法

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

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

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

    SpringBoot如何整合SpringDataJPA

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

    Java畢業(yè)設計實戰(zhàn)之養(yǎng)老院管理系統的實現

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

    Java ArrayList 實現實例講解

    ArrayList是基于數組實現的,是一個動態(tài)數組,其容量能自動增長,類似于C語言中的動態(tài)申請內存,動態(tài)增長內存。這篇文章主要介紹了java ArrayList 實現的相關資料,需要的朋友可以參考下
    2016-11-11

最新評論