第3章 数组

Posted Aiden_Zhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第3章 数组相关的知识,希望对你有一定的参考价值。

3.1 数组概述

数组(Array),是多个相同类型数据一定顺序排列的集合,并使用一个名字命令,通过编号的方式对这些数据进行统一管理。

  • 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型
  • 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址
  • 数组的长度一旦确定,就不能修改
  • 可以通过下标的方式调用指定位置的元素,速度很快

3.2 一维数组

3.2.1 一维数组的声明和初始化

一维数组的声明

  • type var[] 或者 type[] var
    例如:int a[]; int[] a1; double b[]; String[] c;
  • Java语言中声明数组时不能指定其长度(数组中元素的个数), 例如:int a[5]😭非法)

一维数组初始化

  • 动态初始化:数组声明且为数组元素分配空间与赋值操作分开进行
  • 静态初始化:在定义数组的同时就为数组元素分配空间并赋值

初始化举例:

public class ArrayTest {
	public static void main(String[] args) {
		// 动态初始化1
		int[] arr = new int[3];
		arr[0] = 1;
		arr[1] = 3;
		arr[2] = 4;
		// 动态初始化2
		String[] names;
		names = new String[3];
		names[0] = "张三";
		names[1] = "李四";
		names[2] = "王五";

		// 静态初始化1
		int[] arr1 = new int[]{3, 6, 9};
		// 或
		int[] arr1 = {3, 6,9}
		// 静态初始化2
		int[] ids;
		ids = new int[]{1001, 1002, 1003, 1004};
	}
}

3.2.2 一维数组的使用

  • Java中使用关键字new才创建数组,定义并利用关键字new为数组分配空间之后,才可以引用数组中的每个元素
  • 数组元素的引用方式:数组名[数组元素下标]
  • 数组元素下标从0开始
  • 每个数组都有一个length属性指明它的长度,例如:a.length指明数组a的长度
  • 数组一旦初始化,其长度无法改变
  • 数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。对于不同的数据类型,默认的初始化值各有不同,如下表:
数组元素类型元素默认初始值
byte0
short0
int0
long0L
float0.0F
double0.0
char0或写为’\\u0000’
booleanfalse
引用类型null

举个栗子:从键盘读入学生成绩,找出最高分,并输出学生成绩等级。

  • 成绩 >= 最高分 - 10:等级为A
  • 成绩 >= 最高分 - 20:等级为B
  • 成绩 >= 最高分 - 30:等级为C
  • 其他:等级为D
import java.util.Scanner;

public class ArrayDemo {
	public static void main(String[] args) {
		// 使用Scanner读取学生个数
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入学生人数:");
		int number = scanner.nextInt();
		
		// 创建数组,存储学生成绩:动态初始化
		int[] scores = new int[number];
		
		// 数组元素赋值并获取数组最大元素
		int maxScore = 0;
		System.out.println("请输入" + number + "个学生的成绩:");
		for (int i = 0; i < scores.length; i++) {
			scores[i] = scanner.nextInt();
			if (scores[i] > maxScore) {
				maxScore = scores[i];
			}
		}
		
		// 判断学生等级,输出等级和成绩
		char level;
		for (int i = 0; i < scores.length; i++) {
			if (maxScore - scores[i] <= 10) {
				level = 'A';
			}else if (maxScore - scores[i] <= 20) {
		 		level = 'B';
			}else if (maxScore - scores[i] <= 30) {
				level = 'C';
			}else {
				level = 'D';
			}
			System.out.println("student " + i + " score is " + scores[i] + 
					", grade is " + level);
		}	
	}
}

3.3 二维数组

对于二维数组,可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组

3.3.1 二维数组初始化

  • 动态初始化
  • 静态初始化

二维数组初始化举例

public class ArrayTest2 {
	public static void main(String[] args) {
		// 静态初始化
		int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
		
		// 动态初始化
		String[][] arr2 = new String[3][2];
		String[][] arr3 = new String[3][];
	}
}

注意:Java中数组不必都是规则的矩阵形式。

3.3.2 二维数组的使用

public class ArrayTest2 {
	public static void main(String[] args) {	
		// 获取数组的长度
		System.out.println(arr1.length); //3
		System.out.println(arr1[1].length); //2
		
		// 遍历二维数组:两层for循环
		for(int i = 0; i < arr1.length; i++) {
			for(int j = 0; j < arr1[i].length; j++) {
				System.out.println(arr1[i][j]);
			}
		}
	}
}

以上是关于第3章 数组的主要内容,如果未能解决你的问题,请参考以下文章

第3章 使用数组

编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议65~69)

第8章:数组

编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议70~74)

第7章 数组实验

JS常用代码片段-127个常用罗列-值得收藏