简述
Arrays 是JDK提供的操作数组的工具类,array类提供许多操作数组的静态方法。
Arrays.toStirng()
Arrays.toString()方法可以把数组内各元素值拼接为字符串
int[] arr1 = {1,2,3,4,5}; System.out.println(Arrays.toString(arr1));
拷贝数组
数组除了用clone方法拷贝,还可以用Arrays工具类的copyOf()和copyOfRange()进行拷贝。
copyOf()第一个参数为要拷贝的数组,第二个参数为新数组的长度
int[] arr1 = {1,2,3,4,5}; int[] arr2 = Arrays.copyOf(arr1, 10); System.out.println(Arrays.toString(arr2));
copyOfRange(x,l,r)意味将数组x的[l,r)区间拷贝出来
int[] arr1 = {1,2,3,4,5}; int[] arr2 = Arrays.copyOfRange(arr1, 1,3); System.out.println(Arrays.toString(arr2));
排序
Arrays.sort(arr);方法会将数组进行升序排序
int[] arr1 = {6,3,2,1,5}; Arrays.sort(arr1); System.out.println(Arrays.toString(arr1));
如果要进行自定义排序,如果数组内元素类型是对象,则需要实现Comparable接口并重写compareTo方法。
该方法的返回值是 int 。如果返回值为正数,则表示当前对象(调用该方法的对象)比 obj 对象“大”,放在右边。反之“小”,放在左边。如果为零的话,则表示两对象相等。
如果是基本类型,则只能为升序,若要降序或者其他自定义规则排序,我们不能重写compareTo方法因为我们不能动JDK里的类,则需要在第二个参数传一个Comparator类用于设定比较规则。
例如我们要安装绝对值大小进行升序排序,同理返回负数代表t1在左边,正数代表t1在右边
Integer[] arr = {-6,-4,3,7,2}; Arrays.sort(arr,new Comparator<>(){ @Override public int compare(Integer t1, Integer t2) { if(Math.abs(t1) < Math.abs(t2)) return -1; return 1; } }); System.out.println(Arrays.toString(arr));
比较数组
数组的equals并没有进行重写,所以比较的是地址值
Arrays提供equals静态方法用于比较两数组内元素值是否一致
Integer[] arr1 = {-6,-4,3,7,2}; Integer[] arr2 = {-6,-4,3,7,2}; System.out.println(arr1.equals(arr2)); System.out.println(Arrays.equals(arr1, arr2));
二分查找
int binarySearch(Array[] array, int fromIndex, int toIndex, data key),参数2和3可以省略
在array数组内在[fromIndex,toIndex)下标内查询key,若找到则返回key在数组中的索引值
Integer[] arr1 = {1,2,3,4,5}; int i = Arrays.binarySearch(arr1,2); System.out.println(i);
若没找到则返回-(插入位置的索引+1)
Integer[] arr1 = {1,3,3,4,5}; int i = Arrays.binarySearch(arr1,2); System.out.println(i);