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 為什么要避免使用finalizer和Cleaner
這篇文章主要介紹了Java 為什么要避免使用finalizer和Cleaner,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下2021-03-03idea創(chuàng)建javaweb原生項目的實現示例
這篇文章主要介紹了idea創(chuàng)建javaweb原生項目的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09集群環(huán)境中使用ehcache_動力節(jié)點Java學院整理
這篇文章主要為大家詳細介紹了集群環(huán)境中使用ehcache的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Java畢業(yè)設計實戰(zhàn)之養(yǎng)老院管理系統的實現
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+JSP+Easyui+maven+mysql實現一個養(yǎng)老院管理系統,大家可以在過程中查缺補漏,提升水平2022-03-03