Java稀疏數(shù)組詳細(xì)圖文教程
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 為什么要避免使用finalizer和Cleaner
這篇文章主要介紹了Java 為什么要避免使用finalizer和Cleaner,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-03-03idea創(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詳解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é)院整理
這篇文章主要為大家詳細(xì)介紹了集群環(huán)境中使用ehcache的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Java畢業(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-03Java 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