JAVA数据结构-稀疏数组
生活随笔
收集整理的這篇文章主要介紹了
JAVA数据结构-稀疏数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
稀疏數組
什么是稀疏數組?
假設有這樣的一個二維數組
shape是11x11,但是很多數據都是0,比較浪費空間,我們可以通過一些方法來壓縮這個數組,稀疏數組就是一種壓縮數組的方法,通過稀疏數組變換后,原數組變為
變成了4X3,節約了很多空間
稀疏數組存儲原理
當一個數組中大部分元素為0,或者為同一個值的數組時,可以使用稀疏數組來保存該數組。
稀疏數組處理數據的方法是:
- 記錄數組一共有幾行幾列,有多少個不同的值
- 把具有不同值的元素的行列及值記錄在一個小規模的數組中,從而縮小程序的規模
稀疏數組的實現
1.定義一個SparseArray類
public class SparseArray implements Serializable {private static int[][] array1;public SparseArray(int[][] array1) {this.array1 = array1;}public SparseArray() {} }2.向SparseArray類中添加將普通數組變為SparseArray的方法
public void toself(int[][] sou){int row = sou.length;int col = 0;int count = 0;for (int[] so:sou){col = so.length;for (int s:so){if (s!=0){count++;}}}array1 = new int[count+1][3];array1[0][0] = row;array1[0][1] = col;array1[0][2] = count;int target = 1;for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (sou[i][j]!=0){array1[target][0] = i;array1[target][1] = j;array1[target][2] = sou[i][j];target++;}}}}3.向SparseArray中添加將稀疏數組變為普通數組的方法
public int[][] toarray(){int[][] result = new int[array1[0][0]][array1[0][1]];for (int[] demp:array1){result[demp[0]][demp[1]] = demp[3];}return result;}4.為了方便測試,給SparseArray類添加print方法
public void print(){System.out.println(array1[0][0]+"---"+array1[0][1]+"---"+array1[0][2]);System.out.println("---------------------------------------");for (int i = 1; i <= array1[0][2]; i++) {System.out.println(array1[i][0]+"---"+array1[i][1]+"---"+array1[i][2]);}}補充:將SparseArray類存入磁盤和磁盤中讀取
1,存盤
public static void save(SparseArray obj,String path){File file = new File(path);OutputStream out;try {out = new FileOutputStream(file);ObjectOutputStream objectOutputStream = new ObjectOutputStream(out);objectOutputStream.writeObject(obj);objectOutputStream.flush();objectOutputStream.close();out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}2,讀取
public static SparseArray read(String path){File file = new File(path);InputStream in;try {in = new FileInputStream(file);ObjectInputStream objectInputStream = new ObjectInputStream(in);Object o = objectInputStream.readObject();SparseArray res = (SparseArray)o;in.close();return res;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return null;} 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的JAVA数据结构-稀疏数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蚂蚁借呗一个月可以借几次
- 下一篇: 怎么设置ntfs分区 设置NTFS分区的