10-咸鱼学Java-Java中的二维数组

14人阅读 评论(0) 收藏 举报
分类:

二维数组的定义和初始化

        //规则数组
        int[][] a = new int[2][3];
        int[][] a2 = {{1,2,3},{4,5,6}};
        int[][] a3 = new int[][]{{1,2,3},{4,5,6}};
        //不规则数组
        int[][] a4 = new int[2][];
        a4[0] = new int[3];
        a4[1] = new int[2];

3种初始化方式其中a2和a3都已初始化,a和a4需要一个元素一个元素赋值。

        a[i][j] = k;

数组的遍历

1.for

    public static void show1(int[][] array){
        for(int i = 0;i < array.length;i++){
            for(int j = 0;j < array[i].length;j++){
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }

2.foreach

    public static void show2(int[][] array){
        for( int[] brr: array ){
            for(int i:brr){
                System.out.print(i+" ");
            }
            System.out.println();
        }
    }

第一种为for循环的方式,for循环的好处是每次通过下标访问,所以可以通过改变下标来访问不同的元素。
第二种方式为增强for循环,foreach循环方便了开发,可是foreach并不能控制数组的下标,只会按顺序获取每个元素,然后进行处理。
总体而言每个都有其好处,也有其坏处,所以应该根据情况进行使用。

二维数组的拷贝

1.直接copy地址

        int[][] array = {{1,2,3},{4,5,6}};
        int[][] array2 = new int[2][3];
        array2 = array;

array2改变,array也会改变因为他们指向同一块内存空间。
如图
这里写图片描述
2.直接copy
对于基本类型

        int[][] array = {{1,2,3},{4,5,6}};
        int[][] array2 = new int[2][3];

        for(int i = 0;i < array.length;i++){
            for(int j = 0;j < array[i].length;j++){
                array2[i][j] = array[i][j];
            }
        }

这种方式是深拷贝,因为是把每一个基本元素的值赋给了array2数组
这里写图片描述

3.clone拷贝
此处有坑,从7-咸鱼学Java-Java中的数组中可以看出,clone方法可以直接clone数组
此处进行实验

    int[][] a = {{1,2,3},{4,5,6}};
    int[][] b = new int[2][3];
    b = a.clone();
    show1(a);//可以打印数组的函数
    show1(b);
    System.out.println("改");
    a[0][0] = 10086;
    show1(a);
    show1(b);

结果
1 2 3
4 5 6
++++++++++++++++++++++++
1 2 3
4 5 6
++++++++++++++++++++++++

10086 2 3
4 5 6
++++++++++++++++++++++++
10086 2 3
4 5 6
++++++++++++++++++++++++

在一维数组中改变并不会使原数组发生变化,原因是什么呢?
这里写图片描述
因为你clone的是二维数组中存储地址的哪一个维度,所以其实他们指向的数据域是一块区域,所以当你改变a的时候,b会跟着改变
正确的clone为

    int[][] a = {{1,2,3},{4,5,6}};
    int[][] b = new int[2][3];
    for (int i = 0; i < a.length; i++) {
        b[i] = a[i].clone();
    }
    show1(a);
    show1(b);

    System.out.println("改");
    a[0][0] = 10086;
    show1(a);
    show1(b);

结果
1 2 3
4 5 6
++++++++++++++++++++++++
1 2 3
4 5 6
++++++++++++++++++++++++

10086 2 3
4 5 6
++++++++++++++++++++++++
1 2 3
4 5 6
++++++++++++++++++++++++

4.System.arraycopy
详情见7-咸鱼学Java-Java中的数组-3.4
其copy的时候也不能直接copy也需要通过for循环循环copy,要不然就像上面一样,只拷贝了地址维度,并没有copy到值。
5.Arrays.copyOf
详情见7-咸鱼学Java-Java中的数组-3.5
其余特性同上。
二维数组的copy和一位数组相同,对于引用类型来说,copy的都为地址,所以都是浅拷贝,对于基本类型来说都是深拷贝

查看评论

7-咸鱼学Java-Java中的数组

数组的定义初始化 int [] array = {0,1,2,3,4,5,6,7,8,9}; int [] array1 = new int[]{0,1,2,3,4,5,6,7,...
  • qq_38345606
  • qq_38345606
  • 2018-04-12 23:08:05
  • 19

2-咸鱼学Java-Java的基本数据类型

ps 请先下载Eclipse https://www.eclipse.org/downloads/ 基本类型和JVM的关系 Java运行的条件是JVM(java虚拟机),可以分为 ...
  • qq_38345606
  • qq_38345606
  • 2018-03-31 00:00:42
  • 69

4-咸鱼学Java-Java简单的运算符

运算符顺序 []运算符 int[] array = {1,2,3,4}; //[] 声明一个数组 array[0] = 2; //[] 属性获取,下标所指内容 Sy...
  • qq_38345606
  • qq_38345606
  • 2018-04-06 21:22:48
  • 49

3-咸鱼学Java-Java的引用类String解析

String是不是Java的基本类型。它是由char数组组成。 我们来解析一下这个类。 共分为5种情况 1 //One在常量池,str1和str2都指向常量池的One St...
  • qq_38345606
  • qq_38345606
  • 2018-03-31 00:55:08
  • 51

5-咸鱼学Java-Java的控制语句及简单杂论

If-else if是java中主要的控制语句 其语法为 if (a &amp;gt; b) { a&amp;gt;b为真,程序执行语句 ...
  • qq_38345606
  • qq_38345606
  • 2018-04-10 22:38:50
  • 9

1-2 用二维数组求每个学生的总成绩及平均成绩

/* * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: fun.cpp * 作 者:...
  • yaoyao451
  • yaoyao451
  • 2013-03-13 10:55:49
  • 2976

Thinking In Java-Java 编程思想(中英文版 第四版)

  • 2018年01月08日 14:08
  • 90.04MB
  • 下载

C经典 打印二维数组五个学生三门课的每门课平均成绩及总课程的平均的成绩

#include int main(int argc, const char * argv[]) { // 打印二维数组五个学生三门课的每门课成绩及总课程的平均的成绩 int score...
  • lovoo
  • lovoo
  • 2016-04-25 21:20:48
  • 1861

关于iOS自动布局

这里做一个通过代码实现自动布局的Demo,通过IB来做的就不讲了,网上相关的资料很多,这里给出一个写的不错的链接,有兴趣的同学自己看吧. iOS7自动布局教程(一) iOS7自动布局教程(二)   -...
  • nestor_me
  • nestor_me
  • 2014-03-02 19:53:48
  • 1882

21天学通javascript

  • 2012年12月12日 09:17
  • 32.73MB
  • 下载
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 4619
    积分: 690
    排名: 7万+
    博客专栏
    文章存档
    最新评论