JAVA自学笔记,数组

数组

数组是具有相同数据类型的一组数据的集合。例如,球类的集合,足球,篮球,羽毛球等,电器的集合,电视,洗衣机,电风扇等。在程序的设计中,可以将这些集合称为数组,数组中的没个元素具有相同的数据类型。在Java中同样将数组看做是一个对象。虽然基本数据类型不是对象,但是由基本数据类型组成的数组则是对象。在程序设计中引入数组可以更有效的管理和处理数据。我们经常使用的数组包括一维数组和二维数组等。

一维数组

一维数组实质上就是一组相同类型的数据的线性组合,例如银行排队,排成一个长队,每个人都可以想象成数组中的一个变量。手中有自己的号码。数组的元素类型决定了数组的数据类型,它可以使Java中任意的数据类型,包括基本数据类型和其他引用类型。数组名字作为一个合法的标识符。声明以为数组有两种方式:
数组元素类型 数组名字 [];
数组元素类型[] 数组名字;

int arr[];
double[] d;

声明数组后,还不能访问它的任何元素,因为声明数组只是给出了数组名字和元素的数据类型。想要真正使用数组,还要为它分配内存空间。在为数组分配内存空间时必须指明数组的长度,为数组分配内存空间的语法格式如下:
数组名字 = new 数字元素类型[数组元素的个数];
数组名字:被连接到数组变量的名称。
数组元素个数:指定数组中变量的个数,即数组的长度。

arr = new int[5];

以上代码表示要创建一个有5个元素的整形数组,并且将创建的数组对象赋值给引用变量arr,即引用变量arr引用这个数组。上面代码中的arr为数组名称,方括号“[ ]”中的值为数组的下标,也叫索引。数组通过下标来区分不同的元素,也就是说,数组中的元素都可以通过下标来访问,这就相当于刚才比喻的排队,如果我们想找某个人,就直接叫号就可以了。

注意,数组的下标是从0开始的。由于创建的数组arr中有5个元素,因此数组中元素的下标为0~4。

在声明数组的同时也可以为数组分配内存空间,这种创建数组的方法是将数组的声明和内存的分配合在一起:
数组元素类型 数组名 = new 数组元素类型[数组元素个数];

int arr = new int [12];

上面代码的意思是创建了一个int类型长度为12的数组arr。

初始化一维数组

数组可以与基本数据类型一样进行初始化,也就是赋初值。数组的初始化有三种方式:
在这里插入图片描述
从中可以看出,数组的初始化见识包括在大括号之内用逗号分开的表达式列表。用逗号分割数组中的各个元素,系统自动为数组分配一定的空间。第一种初始化方式,将创建3个元素的数组,依次为1,2,3;第二种初始化方式,创建3个元素的数组,依次为1,2,3。而第三种初始化方式先给数组创建了内存空间,再给数组元素注意赋值。

获取数组长度

我们初始化一维数组的时候都会在内存中分配内存空间,内存空间的大小决定了一维数组能够存储多少个元素,也就是数组长度。如果我们不知道数组是如何分配内存空间的,该如何获取数组长度呢?我们可以使用数组对象自带的length属性,语法如下:

arr.length

arr:数组名。
length:数组长度属性,返回int值。
在这里插入图片描述
在这里插入图片描述
那么一维数组如何使用呢,上图:
在这里插入图片描述
在这里插入图片描述

二维数组

二维数组就像Excel表格一样,上图。
在这里插入图片描述
二维数组的创建方式如下:

int arr [] [];
char [] [] arr1;

代码中第一个下表元素代表元素所在的行,第二个下标代表元素所在的列。同一维数组一样,二维数组在声明时也没有分配内存空间,同样要使用关键字new来分配内存,然后才可以访问每个元素。
在这里插入图片描述

初始化二维数组

想要初始化二维数组,我们必须理清楚二维数组中的两个"[ ]""[ ]"方括号代表的含义,上图。
在这里插入图片描述
那么下面我们看一下用代码的方式实现。
在这里插入图片描述
从这段代码中可以看出,二维数组每个元素都是一个数组,所以第一种直接赋值的方式,在大括号内还有大括号,因为每一个元素都是一个一维数组。第二种使用new的方式与一维数组类似。第三种方法比较特殊,在分配内存空间之后,还有两种赋值方式,给某一行直接赋值一个一维数组,或者给某一行的每一个元素分别赋值。

使用二维数组

二维数组在实际应用中非常广泛。下面上一个小例子。
在这里插入图片描述
在这里插入图片描述
我们之前说的数组都是行列固定的矩形方阵,Java同时也支持不规则的数组,例如二维数组中,不同行的元素个数完全不同。上图。
在这里插入图片描述
在这里插入图片描述
这里用到的foreach循环遍历了二维数组a中的每一个一维数组。下面我们看一下如何便利二维数组。
在这里插入图片描述
在这里插入图片描述
这段代码中有一个语法需要掌握,如果有一个二维数组a[][],a.length返回的是数组的行数,a[0].length返回的是第一行的列数,同理a[n].length返回的是第n-1行的列数量,由于二维数组可能是不规则数组,所以每一行的列数量可以不相同,所以在循环遍历二维数组的时候,最好使用数组的length属性控制循环次数。

填充和批量代替数组元素

数组中的元素定义完成后,可以通过Arrays类的静态方法fill()来对数组中的元素进行分配,可以起到填充和替换的效果。fill()有两种参数类型,
第一种:

Arrays。fill(int [] a , int value);

a是要进行元素分配的数组。
value要存储数组中所有元素的值。
上图。
在这里插入图片描述
在这里插入图片描述
第二种方式:

Arrays.fill(int[]a , int fromIndex, int toIndex, int value)

a:要进行分配的数组。
fromIndex:要使用指定值填充的第一个元素索引,包括索引位置元素。
toIndex:要使用指定值填充的最后一个元素的索引,不包括索引位置元素。
value:要储存在数组所有元素中的值。
注意,指定的索引位置不可以大于数组的长度,否则程序会报错。
在这里插入图片描述
Arrays.fill中的参数可以是各种类型,如上图。
下面我们看下第二种fill方式的小例子。
在这里插入图片描述
在这里插入图片描述

复制数组

Arrays类的copyOf();方法与copyOfRange();方法可实现对数组的复制。coopyOf();方法是复制数组指定长度,copyOfRange();方法则将指定数组的指定长度复制到一个新数组中。
copyOf()方法提供了多种使用方式,用于满足不同类型数组的复制。
在这里插入图片描述
original是要进行复制的数组。
newLength是int型常量,指复制后的新数组的长度,如果新数组的长度大于original数组的长度,则用0填充(根据复制数字的类型来决定填充的值,整型用0填充,char型则用null来填充)。如果复制后的数组长度小于数组original的长度,则会从数组original的第一个元素开始截取至满足新数组长度位置。上例子。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面介绍copyOfRange()方法:
在这里插入图片描述
original参数代表要进行复制的数组对象。
form参数指定开始复制数组的索引位置,值不可以大于数组的长度,复制的值包括form索引位置的值。
to参数指定要复制的最后一个值的索引位置,可大于数组的长度,复制的值不包括to索引位置的值。
上小例子。
在这里插入图片描述
在这里插入图片描述

数组排序

Arrays.Sort()方法可实现对数组的排序,sort()方法提供了多种使用方式,可对人以类型数组进行升序排序。语法如下:

Arrays.Sort(object);

object参数就是要进行排序的数组。上小例子。
在这里插入图片描述
在这里插入图片描述
关于更多的Arrays类的方法,大家可以查阅一下JDK API文档。

最后留一个小问题,如果要降序排列该怎么做呢,大家可以自己动手做一下,下篇博客我会把我的代码给大家看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值