前言
数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。例如:如果a
是一个整型数组,a[i]
就是数组中下标为i
的整数。在声明数组变量时,需要指出数组类型(数据元素类型紧跟[]
和数组变量的名字。下面声明了整型数组a:int[]a
;这条语句只声明了变量a,并没有将a初始化为一个真正的数组。应该使用new运算符创建数组。int[] a = new int[100];
这条语句创建了一个可以存储100
个整数的数组。数组长度不要求是常量: new int[n]
会创建一个长度为n
的数组。
一、创建数组
数组本质上就是让我们能 “批量” 创建相同类型的变量。在 Java 中, 数组中包含的变量必须是相同类型。
创建数组的三种方式
方式一:
int[] arr = {
1,2,3,4,5};
方式二:
int[] arr2 = new int[3];//定义数组长度为3,未初始化
方式三:
int[] arr3 = new int[]{
1,2,3,4,5};//定义数组长度为5,初始化
二、 数组的使用
1.获取长度 & 访问元素
public static void main(String[] args) {
int[] arr = {
1,2,3,4,5};
System.out.println(arr.length);//求数组的长度
System.out.println(arr[3]);//访问数组中的元素
arr[3] = 19;
System.out.println(arr[3]);//改变数组里面的内容
}
注意:
- 使用
arr.length
能够获取到数组的长度,.
这个操作为成员访问操作符,后面在面向对象中会经常用到. - 使用
[ ]
按下标取数组元素. 需要注意, 下标从0
开始计数. - 使用
[ ]
操作既能读取数据, 也能修改数据. - 下标访问操作不能超出有效范围
[0, length - 1]
, 如果超出有效范围, 会出现下标越界异常.
2.遍历数组
“遍历” 是指将数组中的所有元素都访问一遍, 不重不漏. 通常需要搭配循环语句.
2.1使用for循环
for
循环可以拿到下标。
public static void main(String[] args) {
int[] arr = {
1,2,3,4,5};
for (int i = 0; i < arr.length; i++) {
//for循环可以拿到下标
System.out.print(arr[i] + " "); //打印数组中的每个元素
}
2.2使用for each循环
语法格式:
for (int element : a)
System.out.println(element);
打印数组a的每一个元素,一个元素占一行。这个循环应该读作“循环a中的每一个元素”( for each element in a)。Java语言的设计者认为应该使用诸如foreach、in
这样的关键字,但这种循环语句并不是最初就包含在Java语言中的,而是后来添加进去的,并且没有人打算废除已经包含同名(例如System.in)方法或变量的旧代码。
for each
循环又称增强for
循环,可以打印数组中的每个元素 但是拿不到数组下标。
public static void main(String[] args) {
int[] arr = {
1,2,3,4,5};
for (int x:arr) {
//
System.out.print(x + " ");
}
2.3Arrays类的toString 方法
调用Arrays.toString(a)
,返回一个包含数组元素的字符串,这些元素被放置在括号内,并用逗号分隔,例如:“[2,3,5,7,11,13]”
。要想打印数组,可以调用:System.out.println(Arrays.toString(a));
public static void main(String[] args) {
int[] arr = {
1,2,3,4,5};
//借助java的操作数组的工具类 Arrays.toString:将参数的数组以字符串的形式进行输出
String ret = Arrays.toString(arr);
System.out.println(ret);
}
三、数组作为方法的参数
3.1打印数组的内容
public static void printf(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = {
1,2,3,4,5};
printf(arr);//按引用传递(按值传递)
}
在这个代码中int[] a
是函数的形参, int[] arr
是函数实参.
3.2理解引用类型
public static void func1(int[] arr){
arr = new int[]{
10,12,24,52,61};
}
public static void func2(int[] arr){
arr[0] = 521;
}
public static void main(String[] args) {
int[] arr = {
1,2,3,4,5};
System.out.print(Arrays.toString(arr));// 1,2,3,4,5
System.out.println();
// func1(arr);//1,2,3,4,5 虽然传的是地址,但是传过去之后,形参只是改变了自己的指向而已。
func2(arr); //521,2,3,4,5
//在函数内部修改数组内容, 函数外部也发生改变.此时数组名 arr 是一个"引用".当传参的时候, 是按照引用传参.
System.out.print(Arrays.toString