陣列是一種資料結構,其可以在記憶體中連續儲存多個資料元素,在記憶體中的分配也是連續的。
如上圖,是乙個長度為6的int型陣列。陣列在建立的時候會在記憶體中開闢一段連續的記憶體,陣列中的元素都是同一型別的(也就意味著陣列中每一元素所占用的記憶體是一樣的),陣列長度確定後不能再修改,陣列是引用型別,可存在多型行為:
class person{}
class student extends person
}
使用陣列來儲存資料的優點:陣列成功建立後,每乙個資料都有索引,可以通過其索引來對資料進行查詢,按照索引來遍歷資料也方便。
缺點:陣列的大小固定後就無法擴容了(如果要擴容得新建另乙個陣列)。
陣列只能儲存一種型別的資料。
新增、刪除的操作慢,因為每次新增或刪除都要移動其他的元素。
因此,適用場景:頻繁查詢,對儲存空間要求不大,很少增加和刪除的情況。
稀疏陣列處理方法:把乙個陣列中不同值的資訊(行、列和對應值)以及陣列的資訊(行數、列數、有多少個不同的值)都記錄進另乙個小規模的陣列(稀疏陣列)。如下:
使用的場景:當乙個陣列中大部分元素是同乙個值時,此時可通過稀疏陣列來降低需要儲存的資料。
稀疏陣列的實現模擬:
/* 原始陣列............................ */
int originalarray = new int[4][4];
originalarray[0][0] = 1;
originalarray[1][1] = 2;
originalarray[2][2] = 3;
/* 稀疏陣列............................ */
/* 將原始陣列存為稀疏陣列 */
/* 1.遍歷得到原始陣列中不同的值的個數*/
int sum = 0;
for (int i = 0; i < originalarray.length; i++)
}}/* 2.建立稀疏陣列
* 思路:要儲存原始陣列的行數、列數、不同值 ===> 列數為3,儲存不同值 ===> 根據不同的值的個數建立列數
* */
int sparsearray = new int[sum + 1][3];
sparsearray[0] = new int;
/* 3.將原始陣列中不同的值放入稀疏陣列
* 思路:1、明確要存放的東西:不同值的資訊(座標和值)
* 2、存放在稀疏陣列中哪個位置:以遍歷到的不同值的次序依次存放
* */
int count = 0; // 記錄是第幾個非0數
for (int i = 0; i < originalarray.length; i++) }}
資料結構 稀疏陣列
資料結構 當乙個陣列中大部分元素為同乙個值時可以使用稀疏陣列來存該陣列 二維陣列轉稀疏陣列 稀疏陣列轉回原始二維陣列 稀疏陣列 public class sparsearray system.out.println 將二維陣列轉成稀疏陣列 1.先遍歷得到非0資料的個數 int sum 0 for i...
資料結構 稀疏陣列
當乙個陣列中大部分元素為 或者為同乙個值的陣列時,可以使用稀疏陣列來儲存該陣列。這樣就可以不用記錄很多沒有意義的資料。它是對二維陣列的一種優化 壓縮了二維陣列 稀疏陣列的處理方法是 稀疏陣列的應用場景 1.使用稀疏陣列來儲存二維陣列 大部分數字為0 棋盤,地圖 2.把稀疏陣列存檔,並且可以恢復為原來...
資料結構 稀疏陣列
package com.hadwinling.sparearray public class sparearray system.out.println 將二維陣列轉為稀疏陣列的思路 1.先遍歷二維陣列得到 非0 的資料個數 int sum 0 for int i 0 i chessarrary.l...