数组实现稀疏数组

  1 public class SparseArray {
  2 
  3     //二维数组转换稀疏数组
  4     public static void TwoArrayToSparseArray(){
  5         //定义原始二维数组 转换
  6         int[][] originalArray=new int[11][11];
  7         //模拟给二维数组存数据
  8         originalArray[3][4]=1;
  9         originalArray[6][7]=2;
 10         //遍历二维数组 得到不同的值的个数 用于创建稀疏数组
 11         int count=0;//记录不同值的个数
 12         for (int[] ints : originalArray) {
 13             for (int item : ints) {
 14                 if(item!=0){
 15                     count++;
 16                 }
 17             }
 18         }
 19 
 20         //创建稀疏数组, 稀疏数组格式为 N+1行 和固定3 列
 21         //第一列存原始数组的行  第二列存原始数组的列  第三列存原始数组值不同的个数
 22         //稀疏数组第一行就用于存放 原始数组的行和列 和不同值的个数
 23         //剩下的N行取决于不同值的个数  每一行存放 不同值的行 列 和不同的值
 24         int[][] sparseArray=new int[count+1][3];
 25 
 26         //给稀疏数组第一行赋值 原始数组的行 列和不同值的个数
 27         sparseArray[0][0]=originalArray.length;
 28         sparseArray[0][1]=originalArray[0].length;
 29         sparseArray[0][2]=count;
 30 
 31         //稀疏数组保存数据需要索引一行一行递增 因为第1行已经添加 所以从二行开始
 32         int index=1;
 33 
 34         //遍历原始数组 存放数据
 35         for (int i = 0; i < originalArray.length; i++) {
 36             for (int j = 0; j < originalArray.length; j++) {
 37                 if(originalArray[i][j]!=0){
 38                     //找到不同值 给稀疏数组赋值 第一列是原始数组行 第二列是原始数组列
 39                     //第三列是原始数组中不同的值  然后索引自增
 40                     sparseArray[index][0]=i;
 41                     sparseArray[index][1]=j;
 42                     sparseArray[index][2]=originalArray[i][j];
 43                     index++;
 44                 }
 45             }
 46         }
 47 
 48         System.out.println("打印从二维数组转换完毕的稀疏数组");
 49         //打印稀疏数组
 50         for (int i = 0; i < sparseArray.length; i++) {
 51             System.out.println(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]+"\t");
 52         }
 53     }
 54 
 55     //稀疏数组转换二维数组
 56     public static void SparseArrayToTwoArray(){
 57         //创建稀疏数组
 58       int[][]  sparseArray=new int[3][3];
 59       //模拟数据
 60        sparseArray[0][0]=11;
 61         sparseArray[0][1]=11;
 62         sparseArray[0][2]=2;
 63         sparseArray[1][0]=3;
 64         sparseArray[1][1]=4;
 65         sparseArray[1][2]=1;
 66         sparseArray[2][0]=6;
 67         sparseArray[2][1]=7;
 68         sparseArray[2][2]=2;
 69 
 70         //创建二维数组
 71         //先得到二维数组的行和列
 72         int row=sparseArray[0][0];
 73         int column=sparseArray[0][1];
 74         int[][] originalArray=new int[row][column];
 75 
 76   //遍历稀疏数组给二维数组赋值 因为稀疏数组第一列存的是二维数组的行列 不同值个数 遍历从1开始
 77         for (int i = 1; i <= sparseArray.length-1; i++) {
 78             //每一行数据的第一列为 行 第二列为列 第三列为值 根据行,列,值给二维数组赋值
 79              row=sparseArray[i][0];
 80             column=sparseArray[i][1];
 81             originalArray[row][column]=sparseArray[i][2];
 82         }
 83 
 84         //打印二维数组
 85         System.out.println("打印从稀疏数组转换完成的二维数组");
 86         for (int[] ints : originalArray) {
 87             for (int item : ints) {
 88                 System.out.print(item+"\t");
 89             }
 90             System.out.println();
 91         }
 92     }
 93 
 94 
 95 
 96     public static void main(String[] args) {
 97 
 98         //二维数组转换稀疏数组
 99         TwoArrayToSparseArray();
100 
101         //稀疏数组转换二维数组
102         SparseArrayToTwoArray();
103     }
104 
105 
106 
107 }

猜你喜欢

转载自www.cnblogs.com/java888/p/11666708.html