[JAVA · 初级]:14.数组

32 篇文章 5 订阅

概念

什么是

是一组具有相同名称,相同类型,不同索引号的变量的集合。

例如:  a[0]  a[1] a[2]  a[3] ....   规定:它们均用来存放int型整数。

则,它们就可以统称为 一个int型数组a。

分类

1) 一维数组: 数组的元素拥有一个索引号。例如:  a[1]  表示数组a的第1个位置上的元素。

2) 多维数组: 数组的元素拥有多个索引号。例如:  a[1][2] 表示数组a的第1行的第2个位置上的元素。

特性

1) 它的元素具有相同的名称,相同类型,不同索引号;

  2) 它以队列的原理来管理所有元素。即: 逻辑上相邻,物理上也相邻。

  3) 它有一个 length属性,表示元素个数或数组长度。

  4) 它的元素的索引号从 0 至  length-1 。

  5) 它的数组名称是一个变量,用来存放数组的地址(引用)。

  6) 数组必须先声明,再创建,最后使用(访问)。

7) 数组一旦创建,其元素个数就确定,不可变。

8) 数组是属于引用类型。即: 一个数组就是一个对象。

一维

一维数组的声明、创建、访问

例如:

声明:  int[] a;  或   int[] a = null;

创建:  a = new int[10]; 

访问:  int x = a[i];  将数组a的第i个位置上的元素值赋给x

注:访问数组的所有元素,往往与 for循环关联;

数组的初始化,即: 让数组的元素第一次得到值,它也往往与for循环关联;

通过赋值方式直接创建数组

例如: int[] a = { 1, 9, 99, 221, 31 };

Person[] ss = { new Person(), newPerson("张三", true, 18) };

注意: 会画一维数组的内存图。

Demo


注意: 在声明数组时,不可指定其元素个数。

例如:  int[10] a;  //error

多维

其元素拥有一个以上的索引号。

以二维数组为例来理解并掌握多维数组。

Demo

二维数组的声明、创建、访问

声明:  int[][] a; 或 int[][] a= null;

创建:  a = new int[3][5];    表示创建了一个三行五列的二维数组a

  a =new int[3][];  表示创建了一个三行,而每行的元素个数待定的二维数组a

for(int i = 0; i < a.length;  i++ ){

a[i] = new int[5];  //为第i行创建了一个具有5个元素的一维数组。

}

注意: 在Java中,实质没有多维数组。即: 多维数组实质上是由多个一维数组组成的。

访问: int x = a[i][j] ;  访问了数组a的第i行的第j列的元素。

在Java中,多维数组有两种

1) 规则的;

2) 不规则的;

以二维数组为例发现:

1) 二维数组的每一行的元素个数相同。则表明此二维数组是规则的。

2) 二维数组的每一行的元素个数可以不同。则表明此二维数组是不规则的。

注:二(多)维数组的访问,往往与嵌套的for循环关联。

二维数组内存分配图

深浅复制

定义一个数组int[] a={3,1,4,2,5}; int[] b=a; 数组b只是对数组a的又一个引用,即浅拷贝。如果改变数组b中元素的值,其实是改变了数组a的元素的值,要实现深度复制,可以用clone或者System.arrayCopy。

如下面的代码:

int[] a={3,1,4,2,5};

int[] b=a.clone();

b[0]=10;

System.out.println(b[0]+"  "+a[0]);

 输出为10  3

可见改变了b的值,但是没有改变a的元素的值。

但是clone和System.arrayCopy都是对一维数组的深度复制。对于二维数组

int[][] a={{3,1,4,2,5},{4,2}};

int[][] b=a.clone();

b[0][0]=10;

System.out.println(b[0][0]+"  "+a[0][0]);

输出为10  10

所以clone并不能直接作用于二维数组

因为java中没有二维数组的概念,只有数组的数组。所以二维数组a中存储的实际上是两个一维数组的引用。当调用clone函数时,是对这两个引用进行了复制。

要证明,只需看下面的输出

int[][] a={{3,1,4,2,5},{4,2}};

int[][] b=a.clone();

b[0][0]=10;

System.out.println(b[0][0]+"  "+a[0][0]);

System.out.println(a[0]==b[0]);

第5句输出为true。


用clone对二维数组进行复制,要在每一维上调用clone函数

int[][] a={{3,1,4,2,5},{4,2}};

int[][] b=new int[a.length][];

for(int i=0;i<a.length;i++){

       b[i]=a[i].clone();

}

 b[0][0]=10;

System.out.println(b[0][0]+"  "+a[0][0]);

System.out.println(b[0]==a[0]);

输出为

10  3

false

业务思想

java中使用数组来保存一组相同数据类型的数据。当你需要保存一组数据类型相同的变量或者对象时,我们不可能给每一个变量都定义一个变量名,这样的操作代码臃肿、工作量大且无意义,这时候我们就使用数据来保存这些数据,数组会根据角标来为每个数据分配地址。在java中如果想要保存一组基本类型的数据,使用数组;如果想保存一组对象或者其他类型的复杂数据可以使用集合。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值