数组
An array is a container object that holds a fixed number of values of a single type.
- 存储多个元素或对象的对象
- 数组中的每一项称为元素
- 长度固定
- 值类型相同
- 索引从 0 开始
java
class HelloArray {
public static void main(String[] args) {
// 声明
int[] arr;
// 创建
arr = new int[2];
// 赋值
arr[0] = 1;
arr[1] = 2;
// 访问
System.out.println("索引 0 的元素: " + arr[0]);
System.out.println("索引 1 的元素: " + arr[1]);
}
}
bash
java HelloArray.java
# 索引 0 的元素: 1
# 索引 1 的元素: 2
声明指向数组的变量
java
byte[] arr1;
// 等价,但不推荐的写法:
// byte arr1[];
short[] arr2;
int[] arr3;
long[] arr4;
float[] arr5;
double[] arr6;
char[] arr7;
String[] arr8;
创建
java
// 分配了可以容纳 5 个元素的数组
int[] arr = new int[5];
或者使用快捷语法创建和初始化数组:
java
// 数组长度由这里的元素个数决定
int[] arr1 = {1, 2, 3, 4, 5};
// 多维数组
int[][] arr2 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println(arr2[1][2]);
length
java
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr.length);
拷贝数组
java
System.arraycopy(
Object src, // 源数组
int srcPos, // 源数组的起始位置
Object dest, // 目标数组
int destPos, // 目标数组的起始位置
int length // 需要拷贝的数组长度
);
// 或
java.util.Arrays.copyOfRange(
T[] original, // 源数组
int from, // 源数组的起始位置
int to // 源数组的终止位置,不包括该位置的元素
)
java
class CopyArray {
public static void main(String[] args) {
int[] src = {1, 2, 3, 4, 5};
CopyArray1.run(src);
CopyArray2.run(src);
}
}
class CopyArray1 {
public static void run(int[] src) {
int[] dest = new int[3];
System.arraycopy(src, 2, dest, 0, 3);
System.out.println("System.arraycopy(src, 2, dest, 0, 3) 结果");
System.err.println("长度:" + dest.length);
System.out.println("元素:" + dest[0] + " " + dest[1] + " " + dest[2]);
}
}
class CopyArray2 {
public static void run(int[] src) {
int[] dest = java.util.Arrays.copyOfRange(src, 2, 5);
System.out.println("java.util.Arrays.copyOfRange(src, 2, 5) 结果");
System.err.println("长度:" + dest.length);
System.out.println("元素:" + dest[0] + " " + dest[1] + " " + dest[2]);
}
}
bash
java CopyArray.java
# System.arraycopy(src, 2, dest, 0, 3) 结果
# 长度:3
# 元素:3 4 5
# java.util.Arrays.copyOfRange(src, 2, 5) 结果
# 长度:3
# 元素:3 4 5
java.util.Arrays
该类提供了一些常用且方便的操作数组的方法。阅读这些方法时,注意类型。
眼熟一下:
方法 | 说明 |
---|---|
binarySearch | 获得指定元素的索引 |
equals | 比较两个数组是否相等 |
fill | 使用指定值填充数组 |
sort | 升序排序 |
parallelSort | 并发执行排序 |
stream | 创建以数组为源的流 |
toString | 将每个元素转换为字符串 |