Java数据结构之数组和稀疏数组,那么大的数组如何压缩?

我又开始记录数据结构和算法啦!从一开始我写博客也记录过这些,不过那时候是用c语言写的,所以打算用Java记录一次数据结构与算法.

什么是数据结构?

数据结构分为线性结构和非线性结构.

  1. 线性结构的特点是数据元素之间存在一对一的线性关系,比如: 一维数组(也称顺序表),队列,链表,栈.
  2. 非线性结构的特点与之对立,如 图,二维数组及多维数组,散列表,树

什么是稀疏数组

数组大会都知道,这里不做多解释.那稀疏数组又是什么?
所谓稀疏就是进行压缩,假如一个数组有多个相同的无用的值,就可以对数组进行压缩,就是去掉无用的值,但是又要让原来的值不能丢失.我们就可以新建一个数组,通过记录原数组有用的值和相关数据,来达到节省空间的目的.
在这里插入图片描述
从上面可以看到,稀疏数组所记录的,索引为0处记录整个原数组的基本信息:有多少行和多少列,一共有多少个值.
从第一行开始,便开始记录原数组的具体数据,这些数据的记录顺序从左到右从上往下.

代码实例

package com.hyb.ds.稀疏数组;

public class demo1 {
    public static void main(String[] args) {
        // 创建一个11x11的二维数组,存放值22,15,56,7 其余都为0
        int[][] arr = new int[11][11];
        arr[2][2] = 22;
        arr[5][5] = 15;
        arr[6][6] = 56;
        arr[7][7] = 7;
        //创建一个长度为5的一维Object数组
        Object[] sparseArr = new Object[5];
        demo2 demo2 = new demo2(11, 11, 4);
        sparseArr[0]=demo2;
        // 遍历数组arr
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
               if (arr[i][j] != 0) {
                   count++;
                   sparseArr[count]=new demo2(i, j, arr[i][j]);
               }
            }
        }
        //遍历sparseArr数组
        for (Object o : sparseArr) {
            //如果sparseArr[i]不为null
            if (o != null) {
                //输出sparseArr[i]
                System.out.println(o);
            }
        }

    }

}

class demo2{
    private int row;
    private int col;
    private int value;

    public demo2(int row, int col, int value) {
        this.row = row;
        this.col = col;
        this.value = value;
    }

    public int getRow() {
        return row;
    }

    public void setRow(int row) {
        this.row = row;
    }

    public int getCol() {
        return col;
    }

    public void setCol(int col) {
        this.col = col;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "demo2{" +
                "row=" + row +
                ", col=" + col +
                ", value=" + value +
                '}';
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值