Arrays 三种基本常用法
一:背景
jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作。例如快速输出、排序、查找等
二:
import java.util.Arrays; //(需要引用class里面的Arrays) public class Test02{ public static void main(String[] args){ int[] arr = {4,2,3,1}; // 【1】数组的字符串形式 String str = Arrays.toString(arr); System.out.println(str);
// 【2】sort对数组排序(只能升序)-> 内部使用快速排序。
Arrays.sort(arr); System.out.println(Arrays.toString(arr));
// 【3】fill 填充数组
//Arrays.fill(arr,0); //System.out.println(Arrays.toString(arr));
// 【4】equals(arr1,arr2) 判断两个数组是否相等。
// 数组相等的条件:a.长度相等 b.对应位置元素相等。
int[] arr2 = {1,2,3}; System.out.println(Arrays.equals(arr,arr2)); } }
三:二分法查找法(以下源码可以在jdk中找到)
private static int binarySearch0(long[] a, int fromIndex, int toIndex, long key) { int low = fromIndex; int high = toIndex - 1; while (low <= high) { int mid = (low + high) >>> 1; long midVal = a[mid]; if (midVal < key) low = mid + 1; else if (midVal > key) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found. }
上图是二分法和冒泡法比较图,还是可以明确看出运行效率的!!
**二分法查找必须是有序的数组,如果找到返回索引;如果没有找到,返回-插入点-1。插入点就是key应该放到数组的位置
四:数组的复制
copyOf(arr,len) 把arr复制len个长度的元素并返回新数组。如果len>arr.length,新数组的长度末尾用0填充。
copyOfRange(arr,from,to) 从arr中from(包含)位置开始复制到to(不包含)这个范围的元素到新数组中。含头不含尾
举例:
int []arr={1,3,4,6,8}; int [] arr2=Arrays.copyOf(arr,6); System.out.println(Arrays.toString(arr2)); //把第一个数组的元素复制到第二个数组 int[] arr3=Arrays.copyOfRange(arr,1,3); System.out.println(Arrays.toString(arr3)); //把第一个数组的一段元素(1到3位元素,不包括第3位)复制到第三个数组 int [] arr4=new int[arr.length]; System.arraycopy(arr,1,arr4,2,2); System.out.println(Arrays.toString(arr4)); //把第一个数组从1位的两个元素复制到第四个数组的2位开始