Day 05
目录
数组
什么是数组
数组是一种引用数据类型,是用来存储多个相同数据类型元素的集合。它是一个连续的内存空间,每个元素在内存中都有一个地址(开辟出一个连续独立的空间)将一组类型相同,逻辑相关的数据存在内存中。数组可以通过索引(下标)访问到其中的元素,索引从0开始,依次递增。数组的大小在创建时就确定,不可改变。数组可以存储基本数据类型或者对象。
为什么使用数组
使用数组的目的是为了方便存储和访问多个相同类型的数据。数组是一种线性数据结构,可以按照一定的顺序存储多个元素,并且每个元素在内存中都有一个唯一的索引,通过索引可以快速地访问和修改数组中的元素。
数组定义和初始化
在Java语言中,可以通过以下三种方式声定义和初始化一个数组:
1.声明数组变量,然后使用关键字new
创建数组对象并指定长度同时初始化为默认值:(boolean类型默认值为false)
dataType[] arrayName = new dataType[arraySize];
示例:
int[] numbers = new int[5]; //声明了一个整型数组 numebers,包含5个元素,每个元素都是int类型,并且初始化默认值 0;
2.声明数组变量,并初始化数组元素:
dataType[] arrayName = {element1, element2, ..., elementN};
示例:
int[] numbers = {1, 2, 3, 4, 5};
3.先声明数组变量,再初始化数组元素:
dataType[] arryName = new dataType[]{element1, element2, ..., elementN};
也可以写成
dataType[] arryName;
arrName = new dataType[]{element1, element2, ..., elementN};
注意:
示例:
int[] numbers = new int[] {1, 2, 3, 4, 5};
int[] numbers;
numbers = new int[] {1, 2, 3, 4, 5};
数组的访问和遍历
访问
在Java中,可以通过索引访问数组的元素。数组的索引从0开始,用于指定元素在数组中的位置。
示例代码如下:
int[] numbers = {1, 2, 3, 4, 5};
int firstNumber = numbers[0]; // 访问第一个元素,结果为1
int secondNumber = numbers[1]; // 访问第二个元素,结果为2
int thirdNumber = numbers[2]; // 访问第三个元素,结果为3
需要注意的是,数组的索引不能超过数组的长度。如果尝试访问超出范围的索引,将会抛出ArrayIndexOutOfBoundsException
异常。
遍历
可以通过循环遍历数组,通过遍历数组的索引,可以依次访问数组中的每个元素。如使用for循环遍历数组:
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
综合练习
找出数组中元素最大的值
public class FindMaxInArray {
public static void main(String[] args) {
int[] numbers = {5, 12, 7, 9, 3, 15};
// 假设数组的第一个元素为最大值
int max = numbers[0];
// 循环遍历数组,比较每个元素和当前最大值
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
System.out.println("数组中的最大值为:" + max);
}
}
拓展
生成随机数
Java中生成随机数的两种方法:
1.使用Math类的random()方法:
int randomInt = (int) Math.round(Math.random() * (max - min) + min); // 生成一个[min, max]之间的随机整数
2. 使用Random类
Random random = new Random();
int randomInt = random.nextInt(max - min + 1) + min; // 生成一个[min, max]之间的随机整数
其中,min为生成随机数的最小值,max为生成随机数的最大值。
数组的复制和扩容
数组复制
在java中可以使用System类的arraycopy()方法来完成数组的复制更为灵活。该方法的语法如下:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
其中:
- src:表示源数组。
- srcPos:表示源数组的起始位置。
- dest:表示目标数组。
- destPos:表示目标数组的起始位置。//目标数组的存储位置也要够,否则会下标越界
- length:表示要复制的元素个数。//原数组要够取 否则会下标越界
下面是一个示例代码,演示了如何使用System.arraycopy()方法完成数组的复制:
int[] srcArray = {1, 2, 3, 4, 5};
int[] destArray = new int[srcArray.length];
System.arraycopy(srcArray, 0, destArray, 0, srcArray.length);
System.out.println(Arrays.toString(destArray)); // 输出:[1, 2, 3, 4, 5]
Java也可以使用Arrays类的copyOf()方法来复制数组但是没有上述方法灵活。该方法的语法如下:
public static <T> T[] copyOf(T[] original, int newLength)
其中
original:原的数组,
T[ ] :目标数组
newLength:目标数组的长度。
//--若目标数组长度>原数组长度,则末尾位置补默认值
//--若目标数组长度<原数组长度,则将末尾的截掉
该方法返回一个新的数组,该数组包含了原始数组中的元素。
示例代码如下:
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
在这个例子中,arr1是要复制的原始数组,arr2是复制后的新数组。注意,copyOf方法只复制原始数组中的元素,而不是引用。
数组扩容
java中如果要扩容数组,也可以使用Arrays类的copyOf()方法来实现。只需要将newLength参数设置为比原始数组大即可,反之则为缩容。
示例代码如下:
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, arr1.length + 1);
在这个例子中,arr1是原始数组,arr2是扩容后的新数组。新数组arr2的长度比原始数组arr1的长度多1。扩容后的新数组中,多出来的那个位置的值会被设置为0(对于int类型)或者null(对于引用类型)。
需要注意的是,如果原始数组是基本数据类型的数组,扩容后的新数组中多出来的那个位置的值为基本数据类型的默认值(如0),而不是null。
数组的排序
数组的排序是对数组世家的最常用的算法;
所谓排序,就是将数组的元素按照从大到小(降序)或者从小到大(升序)进项排序;
常见的排序算法有:冒泡排序,插入排序,选择排序,希尔排序等(后续单独讲)。
目前掌握Java中Arrays类的sort方法对数组进行排序即可。该方法有多个重载形式,可以对不同类型的数组进行排序。下面是对整型数组进行排序的示例:
import java.util.Arrays;
public class ArraySortExample {
public static void main(String[] args) {
int[] numbers = {5, 2, 9, 1, 3};
// 使用Arrays类的sort方法对数组进行排序
Arrays.sort(numbers);
// 遍历排序后的数组
for (int number : numbers) {
System.out.println(number);
}
}
}
输出结果为:
1
2
3
5
9
文章有问题欢迎指正