Arrays:是操作数组的工具类
数组在 Java 中是一种常用的数据结构,用于存储和操作大量数据。但是在处理数组中的数据,可能会变得复杂和繁琐。Arrays 是我们在处理数组时的一把利器。它提供了丰富的方法和功能,使得数组操作变得更加简单、高效和可靠。无论是排序、搜索、比较还是复制,Arrays 都能够满足我们的需求,来帮助我们充分发挥数组的潜力。接下来我们一起看看 Arrays 的各种功能和用法,以帮助我们更好地利用这个强大的工具。
Arrays方法
| 方法名 | 说明 |
|---|---|
| public static String toString(数组) | 把数组拼接成一个字符串 |
| public static int binarySearcH(数组,查找的元素) | 二分查找法查找元素 |
| public static int[] copyOf(原数组,新数组长度)) | 拷贝数组 |
| public staticint[]copyOfRange(原数组,起始索引,结束索引) | 拷贝数组(指定范围) |
| public static void fill(数组,元素) | 填充数组 |
| public static void sort(数组) | 按照默认方式进行数组排序 |
| public static void sort(数组,排序规则) | 按照指定的规则排序 |
下面我们来实操一下吧:
代码演示
现有一个数组:int[] arr = {1,2,3,4,5,6,7,8,9,10};
- toString 把数组拼接成一个字符串
// 1.toString 把数组拼接成一个字符串
System.out.println("------------------toString----------------------");
System.out.println(Arrays.toString(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- binarySearcH 二分查找法查找元素
// 2.binarySearcH 二分查找法查找元素
// 细节1:二分查找的前提是数组中的元素必须是有序的。
// 细节2:如果要查找的元素是存在的,那么返回是真实的索引,如果不存在,那就是返回 -插入点- 1
// 为了避免这样的情况,Java在这个基础上又减1.
System.out.println("------------------binarySearcH----------------------");
System.out.println(Arrays.binarySearch(arr,10)); // 9
System.out.println(Arrays.binarySearch(arr,2)); // 1
System.out.println(Arrays.binarySearch(arr,11)); // -11
- copyOf 拷贝数组
// 3.copyOf 拷贝数组
// 参数一:老数组
// 参数二:新数组的长度
// 如果新数组的长度是小于老数组的长度,会部分拷贝
// 如果新数组的长度是等于老数组的长度,会完全拷贝
// 如果新数组的长度是大于老数组的长度,会补上默认初始值
System.out.println("------------------copyOf----------------------");
int[]newArr1 =Arrays.copyOf(arr,5);
int[]newArr2 =Arrays.copyOf(arr,10);
int[]newArr3 =Arrays.copyOf(arr,15);
System.out.println(Arrays.toString(newArr1)); // [1, 2, 3, 4, 5]
System.out.println(Arrays.toString(newArr2)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
System.out.println(Arrays.toString(newArr3)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0]
- copyOfRange 拷贝数组(指定范围)
// 4.copyOfRange 拷贝数组(指定范围)
//细节:包头不包尾,包左不包右
System.out.println("------------------copyOfRange----------------------");
int[]newArr4 = Arrays.copyOfRange(arr,0,9);
System.out.println(Arrays.toString(newArr4)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
- fill 填充数组
// 5.fill 填充数组
System.out.println("------------------fill----------------------");
Arrays.fill(arr,100);
System.out.println(Arrays.toString(arr)); // [100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
- sort 按照默认方式进行数组排序
// 6.sort 按照默认方式进行数组排序
// 默认情况下,给基本数据类型进行升序排列。底层使用的是快速排序。
System.out.println("------------------sort----------------------");
int[]arr2={10,2,3,5,6,1,7,8,4,9};
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
那这个时候有人就会问了,那我如果不想要他升序排序怎么办呢?其实也是有办法的:
public static void sort(数组,排序规则)按照指定的规则排序
假设我要降序排序,我们来看一下:
- sort(数组,排序规则) 按照指定的规则排序
这里有个小细节需要我们注意一下了:
-
细节:
1.只能给引用数据类型的数组进行排序
2.如果数组是基本数据类型的,需要变成其对应的包装类 对应
我们来看一下吧:
// 1.定义数组
Integer[] arr = {10,6,9,2,4,8,3,1,7,5};
// 其中第二个参数是一个接口,所以在调用的时候需要传递这个接口的实现类对象,作为排序的规则
// 但是这个实现类我们只需要用一次,所以就没有必要单独去写一个类,直接采取匿名内部类的方式就可以啦。
/*
* compare方法的形式参数
* 参数一: o1: 表示在无序字列中,遍历得到的每一个元素
* 参数二: o2:有序序列中的元素
*
* 返回值:
* 负数:表示当前要插入的元素是小的,放在前面
* 正数:表示当前要插入的元素是大的,放在后面
* 0:表示当前要插入的元素跟现在的元素比是一样的们也会放在后面
* */
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2; // 升序排序
// return o1 - o2; // 降序排序
}
});
System.out.println(Arrays.toString(arr));
是不是按照我们规定的规则来进行降序排序了呀!
好啦,到这里Arrays就学习完毕啦,这些是我对常用的方法做了简单的收集整理,不得不说Arrays的底层实现真的很nb,值得反复看很多遍,这种编程思想值得学习借鉴!有什么不懂的可以在评论区互相探讨哟,我们下期不见不散!!!
==最后非常感谢您的阅读,也希望能得到您的反馈 ==