java.util.Arrays有一套用于数组的static实用方法。
equals():比较两个数组是否相等,两个数组内容相同,且数组大小也相同才返回true。
fill():用一个值填充数组。
sort():对数组进行排序, 基本类型用快速排序,针对对象用稳定归并排序。
binarySearch():在排好序中的数组中进行二分查找,找到元素则返回元素的索引,否则返回负数。数组中若包含重复元素,无法确保找到的是哪一个。
asList():由数组得到一个list, 但是这个List的实现类是java.util.Arrays.ArrayList这个类(而不是java.util.ArrayList),它的内部保存了数组的引用,修改了数组的值,list的值也会改变。对list做add、remove操作会抛出UnsupportedOperationException异常, 因为它本质还是一个大小不可变的数组。
System.arraycopy():比for循环更高效的数组复制方法,它是浅拷贝,如果复制对象数组,只会复制对象的引用。
对于元素不是基本类型的对象,用equals()和sort()方法时,需重写元素的equals()方法和实现Comparable接口。
import
java.util.Arrays;
import
java.util.List;
public
class
ArraySDemo {
public
static
void
main(String[] args) {
Integer[] a = {
11
,
9
,
2
,
5
,
8
,
0
,
6
};
Integer[] b = {
15
,
8
,
45
,
62
,
12
,
3
,
10
,
8
};
Integer[] c =
new
Integer[
10
];
Integer[] d =
new
Integer[a.length];
System.arraycopy(a,
0
, d,
0
, a.length);
System.out.println(Arrays.equals(a, d));
System.arraycopy(a,
0
, c,
0
, a.length);
List<Integer> list = Arrays.asList(c);
// list.add(1); 不能增加或删除元素,因为它内部是数组会抛异常
System.out.println(list);
System.arraycopy(b,
0
, c,
0
, b.length);
System.out.println(list);
// 数组的内容改变了,因为asList()方法,只是保存了数组的引用
int
[] a1 = {
11
,
9
,
2
,
5
,
8
,
0
,
6
};
int
[] b1 = {
15
,
8
,
45
,
62
,
12
,
3
,
10
,
8
};
int
[] c1 =
new
int
[
30
];
int
[] d1 =
new
int
[a1.length];
System.arraycopy(a1,
0
, c1,
0
, a1.length);
// a1和c1长度不同
System.out.println(Arrays.equals(a1, c1));
// false
System.arraycopy(a1,
0
, d1,
0
, a1.length);
// 长度相同,对应元素也相同
System.out.println(Arrays.equals(a1, d1));
// true
System.out.println(Arrays.equals(a1, a1.clone()));
Arrays.sort(a1);
System.out.println(Arrays.equals(a1, d1));
// 排序后不同了 false
}
}
输出结果:true[11, 9, 2, 5, 8, 0, 6, null, null, null][15, 8, 45, 62, 12, 3, 10, 8, null, null]falsetruetruefalse