Java 数组相关知识点
一、数组的基本概念
数组是一种用于存储多个相同类型数据的集合。在 Java 中,数组的大小是固定的,一旦创建后无法改变其大小。
二、数组的声明与初始化
1. 声明
类型[] 数组名;
例如:
int[] numbers; // 声明一个整型数组
String[] names; // 声明一个字符串数组
2. 初始化
静态初始化
在声明数组的同时直接赋值:
int[] numbers = {1, 2, 3, 4, 5};
String[] names = {"Alice", "Bob", "Charlie"};
动态初始化
先声明数组,然后通过new
关键字分配内存:
int[] numbers;
numbers = new int[5]; // 分配长度为5的数组
三、数组的访问
通过索引来访问数组中的元素。索引从0开始,到length-1
结束。
int[] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers[0]); // 输出1
numbers[0] = 10; // 修改数组中的元素
四、数组的长度
数组有一个length
属性,用于获取数组的长度(即元素的个数)。
int[] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers.length); // 输出5
五、遍历数组
可以使用循环来遍历数组中的每个元素。
使用for
循环
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
使用增强型for
循环
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
六、多维数组
Java支持多维数组,即数组的元素本身也是数组。
声明和初始化
int[][] matrix = new int[3][3]; // 3x3的二维数组
int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
访问元素
int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
System.out.println(matrix[0][0]); // 输出1
matrix[0][0] = 10; // 修改元素
七、数组的默认值
在动态初始化数组时,数组中的元素会有默认值:
数值类型(如
int
、double
)的默认值是0
。布尔类型(
boolean
)的默认值是false
。引用类型(如
Object
)的默认值是null
。
八、数组的常用函数
1. Arrays.toString()
将数组转换为字符串,方便打印和调试。
示例代码
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(numbers)); // 输出: [1, 2, 3, 4, 5]
}
}
2. Arrays.sort()
对数组进行排序,默认按升序排列。
示例代码
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {5, 3, 1, 4, 2};
Arrays.sort(numbers); // 升序排序
System.out.println(Arrays.toString(numbers)); // 输出: [1, 2, 3, 4, 5]
}
}
3. Arrays.copyOf()
创建一个新数组,并将原数组的内容复制到新数组中。可以指定新数组的长度。
示例代码
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
int[] copy = Arrays.copyOf(numbers, numbers.length * 2); // 新数组长度为原数组的两倍
System.out.println(Arrays.toString(copy)); // 输出: [1, 2, 3, 0, 0, 0]
}
}
4. Arrays.copyOfRange()
创建一个新数组,并将原数组的指定范围的内容复制到新数组中。
示例代码
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
int[] subArray = Arrays.copyOfRange(numbers, 1, 4); // 复制从索引1到3的元素
System.out.println(Arrays.toString(subArray)); // 输出: [2, 3, 4]
}
}
5. Arrays.equals()
直接使用==
比较两个数组时,比较的是它们的引用是否相同,而不是内容是否相同。要比较内容,可以使用Arrays
类的equals
方法:
示例代码
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] array1 = {1, 2, 3};
int[] array2 = {1, 2, 3};
int[] array3 = {1, 2, 4};
System.out.println(Arrays.equals(array1, array2)); // 输出: true
System.out.println(Arrays.equals(array1, array3)); // 输出: false
}
}
6. Arrays.fill()
将数组的指定范围或整个数组填充为指定的值。
示例代码
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = new int[5];
Arrays.fill(numbers, 10); // 将整个数组填充为10
System.out.println(Arrays.toString(numbers)); // 输出: [10, 10, 10, 10, 10]
Arrays.fill(numbers, 1, 3, 20); // 将索引1到2的范围填充为20
System.out.println(Arrays.toString(numbers)); // 输出: [10, 20, 20, 10, 10]
}
}
7. Arrays.binarySearch()
在已排序的数组中使用二分查找法查找指定元素的索引。如果数组未排序,结果可能不准确。
示例代码
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
Arrays.sort(numbers); // 确保数组已排序
int index = Arrays.binarySearch(numbers, 3); // 查找元素3的索引
System.out.println(index); // 输出: 2
}
}
8. System.arraycopy()
将一个数组的内容复制到另一个数组中。可以指定源数组、目标数组、起始位置和复制长度。
详细介绍篇:详细介绍Java的方法System.arraycopy()-CSDN博客
示例代码
public class Main {
public static void main(String[] args) {
int[] src = {1, 2, 3, 4, 5};
int[] dest = new int[10];
System.arraycopy(src, 0, dest, 0, src.length); // 将src的内容复制到dest
System.out.println(Arrays.toString(dest)); // 输出: [1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
}
}
9. Arrays.setAll()
使用给定的函数生成数组的每个元素。
示例代码
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = new int[5];
Arrays.setAll(numbers, i -> i * i); // 使用函数 i -> i * i 生成数组元素
System.out.println(Arrays.toString(numbers)); // 输出: [0, 1, 4, 9, 16]
}
}
10. Arrays.parallelSort()
对数组进行并行排序,适用于大数组,可以利用多核处理器提高排序效率。
示例代码
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {5, 3, 1, 4, 2};
Arrays.parallelSort(numbers); // 并行排序
System.out.println(Arrays.toString(numbers)); // 输出: [1, 2, 3, 4, 5]
}
}
九、数组的边界检查
在访问数组元素时,如果索引超出范围,会抛出ArrayIndexOutOfBoundsException
异常。因此,在编写代码时需要注意边界检查。
十、数组的动态特性
Java数组的大小在创建时是固定的,无法动态改变大小。如果需要动态调整大小,可以使用ArrayList
等集合类。
常用的数组函数总结
函数 | 描述 |
---|---|
Arrays.toString(array) | 将数组转换为字符串表示 |
Arrays.sort(array) | 对数组进行排序 |
Arrays.copyOf(array, newLength) | 拷贝数组,可以指定新长度 |
Arrays.equals(array1, array2) | 比较两个数组内容是否相等 |
System.arraycopy(src, srcPos, dest, destPos, length) | 数组拷贝 |
希望这些知识点和常用的函数总结对你理解 Java 数组有所帮助!