简述
Arrays 类是一个工具类,该类包含用于操作数组的各种方法(如排序和搜索)
导包:java.util.Arrays
成员方法
方法名 | 说明 |
---|---|
static String toString(Xxx[] a) | 将指定数组的内容拼接成字符串表示形式。 |
static void sort(int[] a) | 按照默认规则排列指定的数组。 |
static void sort(int[] a, 规则) | 按照指定规则排列指定的数组。(引用数据类型数组) |
static int binarySearch(Xxx[] a, Xxx e) | 二分法查找元素e,数组中数据必须升序排列 |
static int[] copyOf(原数组, 新数组长度) | 拷贝数组,会根据第二个参数创建新数组 |
static int[] copyOfRange(原数组, int start, int end) | 拷贝数组中的指定范围[start, end) |
static void fill(数组, 填充元素) | 用指定元素填充数组 |
方法binarySearch(Xxx[] a, Xxx e)
注意:
1.如果要查找的元素是存在的,就返回元素所在的索引。
2.如果要查找的元素不存在,则返回 -插入点 - 1
插入点: 如果要插入这个不存在的元素,它应该在升序数组中的位置。如在数组int[] a = {1, 2, 3, 4}中查找 6。很明显找不到,该函数会返回 -4 - 1 即 -5 。
- 1
的目的: 如果在上述数组a中查找0,是找不到的。如果不额外 -1
,返回值就是 -0
,不够直观,所以Java底层采用 -1
方法copyOf(原数组, 新数组长度)
注意:
新数组长度newlength,原数组长度oldlength。
newlength < oldlength 会对原数组进行截取;
newlength = oldlength 原样拷贝
newlength > oldlength 会用元素0进行填充
- 方法
sort(int[] a)
与sort(int[] a, 规则)
指定排序规则代码演示:
import java.util.Arrays;
import java.util.Comparator;
public class sortDemo {
public static void main(String[] args) {
Integer[] arr = {4, 5, 1, 8, 6, 34, 52, 33, 9, 23};
//默认排序规则:升序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); //[1, 4, 5, 6, 8, 9, 23, 33, 34, 52]
//指定为降序
//引用数据类型数组才能指定。
//第二个参数是一个接口,需要传递接口的实现类对象。
/*
该方法的底层实现:二分查找,插入排序。
认为0号索引元素是有序的,1~末尾都是无序的。
遍历无序序列,利用二分查找确定无序序列元素的插入点,再用无序序列元素与插入点元素比较。
比较的规则就是compare方法:
如果方法返回值 >= 0 ,则无序序列元素继续与插入点后面的元素比较;
如果方法返回值 < 0 ,则无序序列元素继续与插入点前面的元素比较。
compare(Integer o1, Integer o2)
o1 -> 无序序列中遍历得到的元素
o2 -> 有序序列中的元素
*/
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
System.out.println(Arrays.toString(arr)); //[52, 34, 33, 23, 9, 8, 6, 5, 4, 1]
}
}