Java 輕松實現(xiàn)二維數(shù)組與稀疏數(shù)組互轉(zhuǎn)
二維數(shù)組
二維數(shù)組本質(zhì)上是以數(shù)組作為數(shù)組元素的數(shù)組,即“數(shù)組的數(shù)組”,類型說明符 數(shù)組名[常量表達式][常量表達式]。二維數(shù)組又稱為矩陣,行列數(shù)相等的矩陣稱為方陣。對稱矩陣a[i][j] = a[j][i],對角矩陣:n階方陣主對角線外都是零元素。
稀疏數(shù)組
1、稀疏算法的基本介紹
當一個數(shù)組中大部分元素為0,或者為同一個值的數(shù)組時,可以使用稀疏數(shù)組來保存該數(shù)組。從而減少計算機不必要的內(nèi)存開銷。
2、稀疏算法的處理方式
(1)數(shù)組中第一行記錄原始數(shù)組中一共有幾行幾列,有多少個不同的值。
(2)把具有不同值的元素的行列及值記錄在一個小規(guī)模的數(shù)組中,從而縮小程序的規(guī)模。
二維數(shù)組轉(zhuǎn)稀疏數(shù)組的思路
- 遍歷原始的二維數(shù)組,得到有效數(shù)據(jù)的個數(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ù)組即可
寫一個二維數(shù)組:
//1.創(chuàng)建一個二維數(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);
}
//每輸出完一個一重數(shù)組換一行
System.out.println();
}
將二維數(shù)組換換位稀疏數(shù)組
//將二維數(shù)組轉(zhuǎn)稀疏數(shù)組
//1.先遍歷二維數(shù)組,得到非0數(shù)據(jù)的個數(shù),知道數(shù)據(jù)個數(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("有效值的個數(shù)為:"+sum);
//2.創(chuàng)立對應(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);
}
//把一個數(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 輕松實現(xiàn)二維數(shù)組與稀疏數(shù)組互轉(zhuǎn)的文章就介紹到這了,更多相關(guān)Java 數(shù)組轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java數(shù)據(jù)結(jié)構(gòu)之稀疏數(shù)組的實現(xiàn)與應(yīng)用
- Java二維數(shù)組與稀疏數(shù)組相互轉(zhuǎn)換實現(xiàn)詳解
- java稀疏數(shù)組的示例代碼
- java數(shù)據(jù)結(jié)構(gòu)算法稀疏數(shù)組示例詳解
- Java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解
- java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):稀疏數(shù)組
- Java實現(xiàn)二維數(shù)組和稀疏數(shù)組之間的轉(zhuǎn)換
- 淺談Java數(shù)據(jù)結(jié)構(gòu)之稀疏數(shù)組知識總結(jié)
- Java稀疏數(shù)組的應(yīng)用實踐
相關(guān)文章
基于Jenkins搭建.NET FrameWork持續(xù)集成環(huán)境
這篇文章主要介紹了基于Jenkins搭建.NET FrameWork持續(xù)集成環(huán)境,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
IDEA安裝lombok插件設(shè)置Enable Annotation Processing后編譯依然報錯解決方法
這篇文章主要介紹了IDEA安裝lombok插件設(shè)置Enable Annotation Processing后編譯依然報錯解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
ElasticSearch學(xué)習(xí)之ES Mapping實戰(zhàn)示例
這篇文章主要為大家介紹了ElasticSearch學(xué)習(xí)之ES Mapping實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
Lombok中@Builder和@SuperBuilder注解的用法案例
@Builder?是?lombok?中的注解,可以使用builder()構(gòu)造的Person.PersonBuilder對象進行鏈式調(diào)用,給所有屬性依次賦值,這篇文章主要介紹了Lombok中@Builder和@SuperBuilder注解的用法,需要的朋友可以參考下2023-01-01
mybatis.type-aliases-package的作用及用法說明
這篇文章主要介紹了mybatis.type-aliases-package的作用及用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

