java 中二维数组在内存中的存储结构

1.

 结论:

先生成 一维数组

然后一维数组的每个元素生成属于自己的数组

最后形成二维数组

1. 为什么说  数组查询快呢?

不是说数组查询快,而是根
据下标(内存寻址公式)可
快速定位到 目标元素在
堆的位置(知道房间号找人
和不知道房间号找人的区别
),时间复杂度是 O(1),map 也是 O(1) 和n没关系
为了保持数据的连续性 在数组中插
入或删除一个数据时 需要做大量的数据搬移工作
因此 在数组中进行插入和删除操作的时间复杂度比
较高 0( n)
1. 二维数组的定义和里面元素的遍历

    /**
     *  定义并遍历二维数组
     */
    @Test
    public void two() {

        //int arr[][]  = new int[3][];
        // 定义二维数组长度
        int[][] arr  = new int[3][];
        arr[0] = new int[1];
        arr[1] = new int[2];
        arr[2] = new int[3];

        // 往数组插入内容
        arr[0][0] = 00;
        arr[1][0] = 10;
        arr[1][1] = 11;
        arr[2][0] = 20;
        arr[2][1] = 21;
        arr[2][2] = 22;

        // 3
        System.out.println(arr.length);
        System.out.println(arr.length);

        System.out.println("遍历二维数组结果如下......");
        for (int i = 0;i < arr.length; ++i) {
            System.out.println("下标为"+i+"对应的一维数组 元素如下");
            // 取出二维数组 每个元素(另外一个数组)
            for( int j = 0;j < arr[i].length; ++j ){

                System.out.print(arr[i][j]);
                System.out.println(",");

            }
        }

    }

结果如下:

1. 应用: 多个长度相同或者不同的一维数组(就可以用二维数组来解决)

 /**
     * 功能描述
     *
     *        合并n个有序数组::
     *        如果是n个⻓度⼀样的数组合并成⼀个(TODO 多个数组可以联想到 二维数组,多个长度一样的数组 联想到二维数组 里 数组的 length 一样)
     *
     *  三种基本的思路,⼀种是先将数组全部拼接到⼀个数组中,然后再排序。第⼆种⽅式是不断进⾏两两
     * 要有序合并,第三种⽅式是使⽤堆排序。第⼆种⽅式不断两两合并就是归并的思想,我们到学习归并排序时再看这
     * 个问题。第三种我们在学习完堆之后再详细解释。这⾥只看第⼀种,新建⼀个N*L的数组,将原始数组拼接存放在
     * 这个⼤数组中,再调⽤Arrays.sort()进⾏排序
     *
     * @author guoyiguang
     * @date 2023/2/8
     * @param
     * @return
     */
    @Test
    public void mergeSameArrays(){


        int n = 2;
        int[][] array = new  int[n][];

        int[] arrayOne = new  int[] { 1,2};
        array[0] = arrayOne;
        int[] arrayTwo = new  int[] { 3,4};
        array[1] = arrayTwo;
        // 思路: 先将数组全部拼接到⼀个数组中,然后再排序

        // 遍历二维数组,将二维数组的元素 都扔到一个 一维数组里,最后 对新的一维数组进行排序
        int[] newArray = new  int[2*n];

        int newArrayIndex = 0;

        for(int a = 0;a<=array.length-1;a++){

            int[] ints = array[a];
            for(int b = 0;b<=ints.length-1;b++){
                newArray[newArrayIndex] =   ints[b];
                // 新一维数组下标增加 1
                newArrayIndex++;
            }

        }


        //排序⼀下
        Arrays.sort(newArray);

        System.out.println(newArray);
        System.out.println(newArray);
        
    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值