Arrays里面包含了一系列静态方法,用于管理,操作数组(比如排序,搜索)。
toString方法,返回数组的字符串形式
Arrays.toStirng(str);
sort排序(自然排序和定制排序)
Interger arr[] = {1,-1,7,0,88};
binarySearch 通过二分搜索法进行查找arr数组中的对应元素,前提是数组必须有序,返回的是对应元素的下标
int index = Arrays.binarySearch(arr,3);
----------------------------------------------
定制排序:
Arrays.sort(arr , new Comparator() {
@override
public int compare(Object o1 , Object o2) {
Integer i1 = (Integer) o1;
Integer i2 = (Integer) o2;
return i2 - i1;
}
});
使用定制排序,传入两个参数,一个是要排序的数组arr,一个是实现了Comparator接口的匿名内部类,该类要求实现compare方法
其中执行的底层源码:
首先判断传入接口类型是否为空,因为此时传入的是实现接口的匿名内部类,所以不为空,执行Timsort()方法,再调用binarySort()方法,在binarySort()方法底层,会通过匿名内部类的compare方法决定排序顺序。
根据compare返回的值是大于0还是小于0,会影响整个排序结果
例如定制冒泡排序
arr数组调用定制排序的bubble02方法,传入了arr数组和实现了Comparator接口的匿名内部类,
在bubble中看到,c调用compare方法,判断前一个数组元素和后一个数组元素的大小,来决定是否交换顺序,若arr[j] > arr[j+1],则每轮都将最大的数排到末尾,按正序进行冒泡排序,否则是每轮都将最小的数排到末尾,按倒序进行冒泡排序。
------------------------------------------
Arrays的其他常见方法
binarySearch()二叉查找
如前文,使用该方法的数组必须有序,若无序则不能使用,查找时若数组中不存在该元素,则返回
return -(low +1); 意思是该元素若存在,应当处于的位置+1
例如数组arr[] = {1,2,90,123,567},此时查找元素568,不存在,但它若存在,位置应当是arr[5],所以此时返回-(5+1) 为-6
copyOf()数组拷贝
从arr数组中,拷贝arr.length个元素到newArr数组中
例如Integer[] newArr = Arrays.copyOf(arr , arr.length+1);
此时新的数组newArr为{1,2,90,123,567,null}
拷贝的数组长度不能为负,否则会抛出异常
fill()数组填充
Integer[] num =new Integer[] {9,3,2};
Arrays.fill(num,99);
此时填充完,num数组为{99,99,99},相当于用指定元素替换数组中所有元素
equals()比较两个数组元素是否完全一致,一致返回true,否则返回false
asList()可以将一组值转换为集合list
LIst aslist = Arrays.asList(2,3,5,6,7);
此时输出aslist会输出一个集合[2,3,5,6,7]