一维数组
4.1 一维数组
目录
4.1.1 认识数组
数组的定义
文字定义:数组是一种数据结构,用于存储多个相同类型的数据。
Java中 "类型[ ]" 即数组,并且索引下标从0开始。
int [] array1;//整型数组
char [] array2;//字符数组
Sting [] array3;//字符串数组
4.1.2 数组的创建及初始化
一维数组语法:
数组元素的数据类型[] 数组名 = new 数组元素的数据类型[数组的容量/长度/元素个数];
数组元素的数据类型[] 数组名 = {元素值1,元素值2,...};
数组元素的数据类型[] 数组名 = new 数组元素的数据类型[]{元素值1,元素值2,...};
// 例如:存储5名同学的成绩
double[] scores = new double[5];
double[] scores = {90, 80, 70, 60, 50};
double[] scores = new double[]{90, 80, 70, 60, 50};
// 赋值语法
数组名[下标] = 元素值;
// 例如:存储第 1 名同学的成绩
scores[0] = 90;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
/* 静态创建数组 */
int[] arr = {1, 2, 3, 4, 5};
/* 动态创建数组*/
int[] arr2 = new int[5];//没有初始化默认为0
System.out.println(Arrays.toString(arr2));
for (int i = 0; i < 5; i++) {
arr2[i] = i + 1;
}
System.out.println(Arrays.toString(arr2));
}
}
输出结果为:
[0, 0, 0, 0, 0]
[1, 2, 3, 4, 5]
4.1.3 遍历数组
for循环遍历
/* 数组遍历(使用for循环) */
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]+" ");
}
输出结果:
1 2 3 4 5
foreach遍历
/* 数组遍历(使用forEach) */
for (int num : arr) {
System.out.print(num+" ");
}
输出结果:
1 2 3 4 5
4.1.4 数组作为传参,调用该方法时,是否改变原数组?
在Java中,当你将数组作为参数传递给方法时,传递的实际上是数组的引用的拷贝,而不是数组本身。这意味着方法接收到的是原始数组引用的一个副本,但这个副本指向同一个数组对象。因此,如果你在方法内部修改了数组的内容(比如改变数组元素的值),这种修改会影响到原始数组,因为原始数组和方法内的数组引用都指向堆内存中的同一个数组对象。
然而,如果你在方法内部对数组引用本身进行操作,比如尝试将方法内的数组引用指向一个新的数组对象,这种改变不会影响到原始数组,因为原始数组的引用并没有改变。
以下是一些示例来说明这一点:
示例1:修改数组元素
public class ArrayTest {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3};
changeArray(originalArray);
for (int value : originalArray) {
System.out.println(value); // 输出修改后的数组元素
}
}
public static void changeArray(int[] array) {
for (int i = 0; i < array.length; i++) {
array[i] = array[i] * 2; // 修改数组元素的值
}
}
}
在这个示例中,changeArray
方法修改了数组的元素值,因此原始数组 originalArray
也会被改变。
示例2:尝试改变数组引用
public class ArrayTest {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3};
changeArrayReference(originalArray);
for (int value : originalArray) {
System.out.println(value); // 输出原始数组元素
}
}
public static void changeArrayReference(int[] array) {
array = new int[]{4, 5, 6}; // 尝试改变数组引用
}
}
在这个示例中,changeArrayReference
方法尝试改变传入的数组引用,使其指向一个新的数组对象。然而,这种改变只影响方法内的局部变量 array
,原始数组 originalArray
并不会受到影响。
总结来说,当你将数组作为参数传递给方法时,你可以修改数组的内容,但无法改变原始数组引用本身。
4.1.5 Arrays 类
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
具有以下功能:
- 给数组赋值:通过 fill 方法。
- 对数组排序:通过 sort 方法,按升序。
- 比较数组:通过 equals 方法比较数组中元素值是否相等。
- 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
具体说明请查看下表:
序号 | 方法和说明 |
---|---|
1 | public static int binarySearch(Object[] a, Object key) 用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 |
2 | public static boolean equals(long[] a, long[] a2) 如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
3 | public static void fill(int[] a, int val) 将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
4 | public static void sort(Object[] a) 对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |