Java入门《四》——数组
3
2021-09-24
上篇在foreach中引入一个数组的概念,数组是最为常见的一种数据结构,是相同类型的、用一个标识符封装到一起的基本类型数据序列或对象序列。
数组是具有相同数据类型的一组数据的集合,根据维数的不同可以分为一维数组、二维数组和多维数组。
括号中的0、1、2、3、4表示数组的下标。需要注意的是,下标从0开始,到数组长度-1为止。
当然也可以直接声明并分配内存,如下:
一、一维数组
1、创建一维数组
数组作为对象允许使用new关键字进行内存分配。在使用数组之前,必须首先定义数组变量所属的类型,即声明数组。 声明数组有两种形式,语法格式如下:数组元素类型 数组名[]; 数据元素类型[] 数组名;[tip type="info" ]常用的是第二种,需要注意的声明时是[]中不能添加任何数据。下面是一个声明数组的例子,两种声明方式都正确,不同数据要声明不同类型的数组[/tip]
int arr[]; //声明int型数组,数组中每个元素都是int数值 String[] str; //声明String数组,数组中每个元素都是String数组声明数组后还不能访问它的任何元素,要想真正使用数组还要为其分配内存空间,且分配内存空间时必须指明数组的长度。格式如下:
数组名 = new 数组元素类型[数组元素个数]; arr = new int[5]; //为数组分配一个大小为5的内存空间一维数组arr的存储状态如下图:
arr[0] | arr[1] | arr[2] | arr[3] | arr[4] |
int[] week = new int[7]; //创建一个一维数组week,并指定数组长度为7还有一点需要注意的是,使用new关键字为数组分配内存时,数组中各个元素的初始化值都为0。比如上述代码使用new关键字创建了长度为7的week数组,那么数组中的元素可以表示为[0, 0, 0, 0, 0, 0, 0],这就是一个一维数组,数组中的每一个元素都初始化为0。
2、初始化一维数组
前面说的初始化是使用new关键字自动初始化,数组也可以与基本数据类型一样由我们自己进行初始化操作,可以分别初始化数组中的每个元素。例:int arr1[] = new int[]{1,2,3,4,5,6}; //第一种 int arr2[] = {10,11,12,13,14}; //第二种数组初始化的方式是:把数据包括在大括号之内,中间用逗号分开数组中元素的值,系统自动为数组分配一定的空间。下面结合上篇的流程控制来举一个一维数组的例子
public class Test { public static void main(String[] args) { int[] num = {1,2,3,4,5,6,7,8,9,10}; //创建并初始化数组 int sum = 0; //储存累加和 for(int i = 0; i其中,num是数组名,这个数组总长度为10,但在一般编程中,可能会出现需要修改数组长度的时候,此时假设for循环中写的是i<10,那么我们在修改代码的时候可能会忽略这个地方导致出现意想不到的错误,所以我们在编写代码时要习惯使用数组名.length来获取数组的长度,如上述代码中的num.length其实就是10.而下一句中的num.length-1是因为数组下标是从0开始的,当我们获取最后一个元素时,数组下标为总长减一,故num.length-1就是最后一个元素10的下标为9。 二、多维数组
1、二维数组
如果一维数组中的各个元素仍是一维数组,那么它就是一个二维数组。二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代码元素所在的列。或用线性代数的知识来说,二维数组就是一个矩阵,第一个下标代表矩阵的行,第二个下标代表矩阵的列。 二维数组的声明也有两种方式,语法格式如下:数组元素类型 数组名[][]; 数组元素类型[][] 数组名;与一维数组一样,如果声明时没有分配内存空间,同样也要使用关键字new来分配内存。 二维数组可以看做由多个一维数组组成,在给二维数组分配内存时,可以为这些一维数组同时分配相同的内存。第一个括号中的数组是一维数组的个数,第二个括号中是一维数组的长度。int arr = new int[2][4];上述代码就是一个典型的声明一个二维数组arr并为其分配内存空间,分配后arr拥有两个长度为4的一维数组,内存分配如下图:我们也可以为每一维单独分配内存。如下:
arr[0][0] arr[0][1] arr[0][2] arr[0][3] arr[1][0] arr[1][1] arr[1][2] arr[1][3] int[][] a = new int[2][]; a[0] = new int[2]; a[1] = new int[3];这样就得到了一个二维数组,第一个一维数组长度为2,第二个一维数组长度为3 二维数组的初始化与一维数组类似,同样可以使用大括号完成二维数组的初始化。如下:int arr[][] = {{3,0},{5,7},{6,9}};这就是一个arr[3][2]的数组,有三个一维数组,每个一维数组的长度都为2。但要明确下标是从0开始的,比如arr[1][0]=5,指的是第二个一维数组的第一个元素为5。故我们也可以直接给arr[x][y]赋值,如给arr[1]的第二个元素赋值:arr[1][1] = 50;那么上述数组就变成了如下形式:int arr[][] = {{3,0},{5,50},{6,9}};2、三维数组
三维数组可以直接推算了,一维一个括号,二维两个括号,那么三维就三个括号。int arr[][][] = new int[][][]{ {{1,2,3},{4,5,6}}; {{7,8,9},{10,11,12}}; {{13,14,15},{16,17,18}}; };三、数组的基本操作
1、遍历数组
遍历数组就是获取数组中的每个元素,通常使用for循环实现。 遍历一维数组只需要一个for循环即可实现。public class Test { public static void main(String[] args) { int[] week = {1,2,3,4,5,6,7}; for(int i = 0; i<7; i++) { System.out.println(week[i]); } } }或者用foreach语句:public class Test { public static void main(String[] args) { int[] week = {1,2,3,4,5,6,7}; for(int arr : week) { System.out.println(arr); } } }遍历二维数组需要双层循环:public class Test { public static void main(String[] args) { int a[][] = {{1,2},{3,4,5},{6,7,8,9}}; for(int i =0; i需要注意的是,第一个for循环是遍历行的,所以是长度是a.length,而第二个for循环是遍历列的,长度是a[i].length。 [tip type="info" ]再强调一次print和println的区别,print是输出但不换行,println是输出并换行。[/tip] 2、对数组进行排序
数组可以通过使用java.util包中的Arrays类来实现排序,sort()方法提供了许多重载形式,可对任意类型数组进行升序排序。语法格式为:Arrays.sort(object);创建一个数组,排序后输出:import java.util.Arrays; public class Test { public static void main(String[] args) { int[] arr = new int[] {17,21,6,59,31,13,3}; System.out.println("原始数组:"); for(int i =0;iJava语言中的String类型数组排序算法是根据字典编排顺序排序的,因此数字排在字母前面,大写字母排在小写字母前面。 3、其他操作
数组还有许多操作,比如填充替换数组元素的fill方法、复制数组的copyOf方法等等,包括Arrays类也还提供了其它操作数组的方法,大家可以通过查阅资料或API来学习它们的使用方法。 还有一个很重要的知识点就是排序算法,上面已经出现了多重循环,那么就可以由此引出诸如冒泡排序、选择排序等等的许多排序算法,常见的有冒泡、选择、直接插入、快速、归并、希尔、堆排序等等。
- 0
-
分享