//有点长
@Test
public void arraysDemo() {
int[] arr = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
List asList = Arrays.asList(arr);// 返回一个集合列表
// Arrays.sort(arr);// 冒泡排序
int binarySearch = Arrays.binarySearch(arr, 9);// 返回key的下标位置0开始,在执行binarySearch()前必须先调用sort();否则不保证结果准确性
int[] copyOf = Arrays.copyOf(arr, 10);// 复制并返回一个指定长度的数组
int[] copyOfRange = Arrays.copyOfRange(arr, 0, 5);// 返回复制指定范围内容
String[] arr1 = { "C", "h", "e", "n", "g", "L", "o", "n", "g" };
String[] arr2 = { "C", "h", "e", "n", "g", "L", "o", "n", "g" };
boolean deepEquals = Arrays.deepEquals(arr1, arr2);// 适用于比较嵌套数组(深层数组),二维数组等
int deepHashCode = Arrays.deepHashCode(arr1);// 根据指定数组的"深层内容"返回哈希码(一种不完全唯一的算法)
String deepToString = Arrays.deepToString(arr1);// 返回指定数组的“深层内容”的字符串表示形式
boolean equals = Arrays.equals(arr1, arr2);// 指定数组彼此相等则返回true
// Arrays.fill(arr, 2);// 将指定int值替换所有数组内元素
int hashCode = Arrays.hashCode(arr);// 根据指定数组返回哈希码
/*
* parallelPrefix(int[] array, IntBinaryOperator op)
* 使用提供的函数并行地累积给定数组的每个元素(官网说明),用的二元运算法
* 表示没看太懂,不过没关系,可以试嘛,经过一番实验,总结出一个规律(运行看下结果输出)我这里是做的乘法,做其他操作也可以的哈 :
* 第一次是第一个元素和第二个元素相乘,第二次是第三个元素和一二元素相乘结果相乘以此类推,后面都一样了.
*
*/
System.out.println("-----------parallelPrefix---------");
Arrays.parallelPrefix(arr, new IntBinaryOperator() {// 匿名内部类
@Override
public int applyAsInt(int left, int right) {
System.out.println("左:" + left + "\t右:" + right);
return left * right;
}
});
printArray(arr);// 遍历数组
System.out.println("----------parallelPrefix----------");
// Arrays.parallelPrefix(arr, (IntBinaryOperator) (left, right) -> left
// * right);// Lambda表达式,同内部类都一样,后续会专门介绍
/*
* parallelSetAll(double[] array, IntToDoubleFunction
* generator)使用提供的生成器函数并行设置指定数组的所有元素以计算每个元素(官网说明) 遍历该数组的所有元素索引
*/
System.out.println("\n--------parallelSetAll--------\n");
int[] arr3 = { 11, 91, 81, 71, 61, 51, 41, 31, 21, 11 };
Arrays.parallelSetAll(arr3, new IntUnaryOperator() {
@Override
public int applyAsInt(int operand) {
System.out.print(operand + ",");
return operand;
}
});
printArray(arr3);
System.out.println("\n--------parallelSetAll--------");
// parallelSort(int[] a)将指定的数组按升序排序。
int[] arr4 = { 11, 91, 81, 71, 61, 51, 41, 31, 21, 11 };
Arrays.parallelSort(arr4);
printArray(arr4);
System.out.println("\n--------setAll-----------\n");
/*
* setAll(int[] array, IntUnaryOperator
* generator)使用提供的生成器函数设置指定数组的所有元素以计算每个元素。不同点:parallelSetAll是并行设置
*/
int[] arr5 = { 11, 91, 81, 71, 61, 51, 41, 31, 21, 11 };
Arrays.setAll(arr5, new IntUnaryOperator() {
@Override
public int applyAsInt(int operand) {
return operand;
}
});
printArray(arr5);
System.out.println("\n--------setAll-----------");
int[] arr6 = { 11, 91, 81, 71, 61, 51, 41, 31, 21, 11 };
OfInt spliterator = Arrays.spliterator(arr6);// 返回spliterator.OfInt覆盖所有指定数组的内容。
System.out.println("\nspliterator长度:" + spliterator.estimateSize());// 返回spliterator元素个数
System.out.println("\n--------tryAdvance-----------");
while (spliterator.estimateSize() > 0) {
spliterator.tryAdvance((IntConsumer) value -> {
System.out.print(value * 2 + " ");// 对剩余元素进行处理,返回true,否则返回false
});
}
spliterator.forEachRemaining((IntConsumer) value -> System.out.print(value + " "));// 遍历Spliterator
int[] arr7 = { 11, 91, 81, 71, 61, 51, 41, 31, 21, 11 };
String string = Arrays.toString(arr7);//将指定数组转换为String
}
/**
* 遍历数组
*/
public void printArray(int[] arr) {
System.out.print("{");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i]);
} else {
System.out.print(arr[i] + ",");
}
}
System.out.println("}");
}
可以参考官方API:
https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html