JavaSE:数组
走进 Java 数组:新手入门指南
在 Java 编程的领域中,数组是一类极为基础且应用广泛的数据结构。它如同一个精心整理的收纳盒,专门用来有序存放相同类型的数据。对于刚踏入 Java 编程世界的新手而言,熟练掌握数组的使用方法,是提升编程技能的重要开端。接下来,让我们一同深入探索 Java 数组的各个方面。
一、数组的基础概念
数组本质上是一组相同类型数据的有序集合。打个比方,你有一个专门用来放球类的收纳筐,里面放了篮球、足球、排球。这里的每个球就相当于数组中的一个元素,而整个收纳筐就代表了这个数组。数组中的每个元素都有其对应的编号,我们将其称作索引,借助这个索引,就能迅速定位到我们需要的元素。例如,最先放入的篮球,其索引为 0,随后放入的足球索引是 1,依此类推。
归纳
数组本身是一组相同数据类型元素的集合,是一个容器;
数组可以存储基本数据类型,也可以存储引用数据类型;
数组创建时必须指定长度,且长度不可变;
数组中每个元素空间是连续的;
二、数组的创建方式
在 Java 里,创建数组主要有以下几种常见方式:
直接初始化
// 创建一个存储整数的数组,并同时完成元素的初始化。此处创建的数组名为numbers,其中包含5个整数
int[] numbers = {1, 2, 3, 4, 5};
分步声明、分配空间与初始化
// 先声明一个字符串数组,此时仅仅是告知程序将有一个用于存放字符串的数组,尚未分配实际的内存空间
String[] names;
// 接着为数组分配能够存储3个元素的空间,这意味着此刻该数组可以容纳3个字符串
names = new String[3];
// 最后对数组元素进行初始化,给数组中的每个位置赋予具体的值
names[0] = "小李";
names[1] = "小张";
names[2] = "小王";
三、数组元素的访问
数组中的元素通过索引来访问,索引从 0 开始计数。例如,在上述的numbers数组中,numbers[0]能够获取到第一个元素 1,numbers[2]则可以获取到第三个元素 3。
// 从numbers数组中获取第一个元素,并将其存储到firstNumber变量中
int firstNumber = numbers[0];
// 输出获取到的第一个数字
System.out.println("第一个数字是:" + firstNumber);
四、数组的遍历方法
遍历数组,就是依次访问数组中的每一个元素。常见的遍历方式有以下两种:
使用 for 循环
// i从0开始,只要i小于数组numbers的长度,循环就会持续进行
// 每完成一次循环,i的值就会增加1,以此实现对数组中每个元素的顺序访问
for (int i = 0; i < numbers.length; i++) {
// 输出每个元素的序号以及对应的数值
System.out.println("第" + (i + 1) + "个数字是:" + numbers[i]);
}
使用增强 for 循环(foreach 循环)
// 对于numbers数组中的每一个元素,都会将其赋值给number变量
// 然后执行花括号内的代码
for (int number : numbers) {
// 输出元素的值
System.out.println("数字是:" + number);
}
增强 for 循环的语法更为简洁,尤其适用于仅需读取数组元素,而无需对元素索引进行操作的场景。
五、数组的迭代操作
迭代和遍历的概念相近,都是逐个访问数组中的元素。除了上述两种循环方式外,还可以借助Iterator接口来实现数组的迭代(尽管数组本身并不直接实现该接口,但可通过一些手段间接达成)。不过,对于数组操作而言,前面介绍的两种循环方式基本能够满足大多数实际需求。例如,当我们想要打印出names数组中所有人的名字时,使用 for 循环和增强 for 循环就能轻松实现,也就无需采用相对复杂的Iterator接口。
六、数组的排序算法
冒泡排序
冒泡排序是一种较为简单的排序算法。其工作原理类似水中气泡上升的过程,它会对相邻的两个元素进行比较,如果顺序不符合要求,就将它们交换位置。每一轮比较结束后,当前最大(或最小)的元素就会被 “移动” 到数组的末尾(或开头)。
public static void bubbleSort(int[] arr) {
// 获取数组的长度
int n = arr.length;
// 外层循环用于控制比较的轮数,总共需要进行n - 1轮比较
for (int i = 0; i < n - 1; i++) {
// 内层循环控制每一轮比较的次数,随着外层循环的推进,每一轮的比较次数会逐渐减少
for (int j = 0; j < n - i - 1; j++) {
// 如果当前元素大于下一个元素,就交换它们的位置
if (arr[j] > arr[j + 1]) {
// 定义一个临时变量,用于交换元素时暂存数据
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
选择排序
选择排序的核心思路是在每一轮从数组中挑选出最小(或最大)的元素,然后将其放置到数组的开头(或末尾)。
public static void selectionSort(int[] arr) {
// 获取数组的长度
int n = arr.length;
// 外层循环控制选择的轮数,一共需要进行n - 1轮选择
for (int i = 0; i < n - 1; i++) {
// 假设当前索引i处的元素是最小的
int minIndex = i;
// 内层循环从i + 1开始,在剩余元素中寻找最小元素的索引
for (int j = i + 1; j < n; j++) {
// 如果找到比当前最小元素更小的元素,就更新最小元素的索引
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换当前位置i的元素和找到的最小元素
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
七、二维数组的介绍
二维数组可以理解为 “数组的数组”,它类似于一个表格,具有行和列的结构。比如,当我们要记录一个小组学生的英语和数学成绩时,就可以使用二维数组。
二维数组的创建
// 直接初始化一个3行2列的二维数组,这里假设记录的是3个学生的英语和数学成绩
int[][] scores = {
{80, 85}, // 第一个学生的英语80分,数学85分
{75, 78}, // 第二个学生的英语75分,数学78分
{90, 92} // 第三个学生的英语90分,数学92分
};
二维数组元素的访问
访问二维数组中的元素需要使用两个索引。例如,scores[1][0]表示第二行第一列的元素,也就是第二个学生的英语成绩 75 分。
二维数组的遍历
// 外层循环控制行数,i代表行索引
for (int i = 0; i < scores.length; i++) {
// 内层循环控制列数,j代表列索引
for (int j = 0; j < scores[i].length; j++) {
// 输出每个学生的每门课程成绩
System.out.print("第" + (i + 1) + "个学生的第" + (j + 1) + "门成绩是:" + scores[i][j] + " ");
}
System.out.println();
}
通过以上内容的学习,相信你已经对 Java 数组有了初步的了解。数组在编程实践中应用十分广泛,建议你多进行实际操作练习,以便更好地理解和掌握数组的各种操作。要是在学习过程中遇到任何疑问,欢迎随时查阅更多相关资料,继续深入探索。