java.util.Arrays 是 Java 提供的数组工具类,里面全是静态方法,用来方便地操作数组。
常用方法
| 分类 | 方法 | 说明 |
|---|---|---|
| 打印 | Arrays.toString(arr) |
一维数组转字符串 |
Arrays.deepToString(arr) |
多维数组转字符串 | |
| 排序 | Arrays.sort(arr) |
升序排序 |
Arrays.sort(arr, from, to) |
对 [from, to) 部分排序 |
|
Arrays.sort(objArr, comparator) |
对象数组自定义排序 | |
Arrays.parallelSort(arr) |
并行排序,大数组可能更快 | |
| 查找 | Arrays.binarySearch(arr, key) |
二分查找,必须先排序 |
| 比较 | Arrays.equals(a, b) |
一维数组内容是否相等 |
Arrays.deepEquals(a, b) |
多维数组内容是否相等 | |
Arrays.compare(a, b) |
按字典序比较,Java 9+ | |
Arrays.mismatch(a, b) |
返回第一个不匹配位置,Java 9+ | |
| 填充 | Arrays.fill(arr, value) |
全部填充 |
Arrays.fill(arr, from, to, value) |
部分填充 | |
| 复制 | Arrays.copyOf(arr, newLength) |
复制并指定新长度 |
Arrays.copyOfRange(arr, from, to) |
复制区间 | |
| 转 List | Arrays.asList(...) |
转成固定大小 List |
| 流 | Arrays.stream(arr) |
转成 Stream |
| 生成 | Arrays.setAll(arr, i -> ...) |
按索引生成元素 |
| 哈希 | Arrays.hashCode(arr) / deepHashCode |
计算内容哈希 |
java
public class Array_ {
public static void main(String[] args) {
//toString方法
Integer integer[] = {1, 20, 30};
System.out.println(Arrays.toString(integer));
//sort方法 排序
Integer i1[] = {1, 33, 20, -1, 80, 30};
//sort方法 正序排序
//由于数组是引用类型,参数的方法里面对数组的更改直接影响到自身。
Arrays.sort(i1);
System.out.println(Arrays.toString(i1));
//sort方法 降序排序
/**
* 1. sort方法需要降序排序,需要传递一个对象,该对象是通过匿名类创建的。这个匿名类实现了Comparator接口。
* 2. 这里体现了接口编程的好处:接口编程 + 动态绑定 + 匿名类综合使用
* 3. 通过debug源码分析最终执行这块代码决定了排序顺序:
* // Find end of run, and reverse range if descending
* if (c.compare(a[runHi++], a[lo]) < 0) { // Descending
* while (runHi < hi && c.compare(a[runHi], a[runHi - 1]) < 0)
* runHi++;
* reverseRange(a, lo, runHi);
* } else { // Ascending
* while (runHi < hi && c.compare(a[runHi], a[runHi - 1]) >= 0)
* runHi++;
* }
*/
Arrays.sort(i1, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Integer o11 = (Integer) o1;
Integer o21 = (Integer) o2;
return o21 - o11;
}
});
System.out.println(Arrays.toString(i1));
//binarySearch 给定值,通过二分法查找数组中对那个的键。不存在返回-(low + 1) low 表示存在的位置
//使用binarySearch前,必须数组必须是有序的(从小到大或者从大到小)
System.out.println(Arrays.binarySearch(i1, 1));
//copyOf方法 数组元素的复制 底层调用的是System.arraycopy()方法
//1.从数组arr中的第0位置依次拷贝newLength个元素到newArr中。
//2.如果newLength参数大于arr.length,在数组后边添加null元素,
//3.newLength小于0,会抛出异常。
Integer[] arr = {1, 33, 20, -1, 80, 30};
Integer[] newArr = Arrays.copyOf(arr, arr.length + 3);
System.out.println(Arrays.toString(newArr));
//fill方法 数组填充
//使用99替换原来num数组中所有的元素
Integer[] num = {1, 8, 6, 20, 5};
Arrays.fill(num, 99);
System.out.println(Arrays.toString(num));
//equals方法 比较两个数组的内容是否完全一致(每一个元素都作比较)
Integer[] arr1 = {1, 8, 6, 20, 5};
Integer[] arr2 = {1, 8, 6, 20, 5};
System.out.println(Arrays.equals(arr1, arr2));
//asList方法 将一组值转换成 list类型
//asList的编译类型是接口。
//asList的运行类型是:class java.util.Arrays$ArrayList
// 意思是class java.util.Arrays类中的一个静态内部类
List asList = Arrays.asList(1, 3, 5, 6, 34, 53, 0, 90);
System.out.println("asList = "+ asList);
System.out.println("asList run type is:"+asList.getClass());
}
}