关于数组
- 数组有且只有length字段。
- 基本类型数组直接存储数据,对象类型数组存储引用。
- 方法可以返回数组而不需要担心内存泄露问题。
初始化
一维数组
A[] a = new A[4]; // 基本类型被被初始化为0,对象类型会被初始化为null
A[] b = {new A(), new A(), new A()};
A c = new A[]{new A(), new A()};
多维数组
int[][] a = {{1, 2, 3}, {4, 5, 6}};
int[][] b = new int[2][2];
int[][][] c = new int[2][][];
for (int i = 0; i < c.length; i++) {
c[i] = new int[2][];
for (int j = 0; j < c[i].length; j++) {
c[i][j] = new int[2];
}
}
数组与泛型
创建泛型实例数组
// 擦除使数组不能知道确切类型
List<Integer>[] a1 = new List<Integer>[10];
List<Integer>[] a2;
List[] a3 = new List[10];
a2 = (List<Integer>[]) a3; // a2可以绕过检查,创建泛型实例数组
泛型中返回数组
class A<T> {
// 数组可以知道返回的确切类型
private T[] fun(T[] arg) {
return arg;
}
}
创建泛型参数数组
class A<T> {
private T[] array;
public A(int size) {
array = new T[size];
array = (T[]) new Object[size];
}
}
相关工具
-
asList()
:接受一个数组或者一个逗号分隔的元素列表,返回一个尺寸无法改变的List。
-
fill()
:用数据填充数组。
- 两个参数:第一个是数组,第二个是要填充的值。
- 四个参数:第一个是数组,第二三个是要填充的区域,第四个是要填充的值。
-
toString()
、deepToString()
:分别将一维数组和多维数组转换为字符串。
-
asList()
:接受任意的序列或数组,产生一个List容器。
-
equals()
、deepEquals()
:分别比较一维数组和多维数组是否相等。
-
sort()
:对数组进行排序。
-
binarySearch()
:在已经排序的数组里查找元素。
-
hashCode()
:产生散列码。
System.arraycopy()
- 用于复制数组,速度比for循环快。
- 接受5个参数:源数组、起始索引、目标数组、起始索引、长度。
- 对于对象数组执行浅拷贝。
- 不会自动拆包和包装。