Arrays
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
多种方法 都是 static
多个字符串转list
List<String> strList = Arrays.asList("abc","def","cde");
//asList源码
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
数组转字符串 (可以当循环遍历输出)
System.out.println(Arrays.toString(arr));
//toString 源码 重写了Object的toString()
public static String toString(long[] a) {
if (a == null)
return "null"; //传入数组为null,返回"null"
int iMax = a.length - 1; //拿最大索引值
if (iMax == -1) //数组里没元素返回"[]"
return "[]";
StringBuilder b = new StringBuilder(); //线程不安全,但高效
b.append('['); //加前[入缓冲区
for (int i = 0; ; i++) {
b.append(a[i]); //加元素
if (i == iMax)
return b.append(']').toString();//加末尾[并转为String
b.append(", ");
}
}
数组排序
Arrays.sort(arr);//快速排序
二分查找法
// 二分查找还可以查找好多东西
int [] arr {1,2,3,4,5,6,7,8};//arr必须先排序,不然不能确定返回是什么
System.out.println(Arrays.binarySearch(arr,3));//返回下标值
System.out.println(Arrays.binarySearch(arr,0));//负的插入点-1(-2)
private static int binarySearch0(int[] a, int fromIndex, int toIndex,
int key) {
int low = fromIndex; //最小索引
int high = toIndex - 1; //最大索引数组长度-1
while (low <= high) { //最小索引小于等于最大索引可以循环
int mid = (low + high) >>> 1; //求出中间索引值,(最大+最小)/2
int 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.
}
复制数组copyOf()方法
Arrays.copyOf(int [] arr ,int len) //从0开始 长度为len
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
@SuppressWarnings("unchecked")
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
//这里依然是使用了System.arraycopy方法,前面提到过,它是native方法,作用是对数组的
//复制,之前在String类中也提到了它,
return copy;
}
希望大家多看一下:Java方法之–System.arraycopy方法和Arrays.copyOf()
复制数组copyOfRange()方法
Arrays.copyOfRange(int [] arr,int start,int end) //包含头不包含尾
fill函数 填满
Arrays.fill(); //用于填满数组的函数
比较两个数组
Arrays.equals(arr1, arr2);
public static boolean equals(int[] a, int[] a2) {
if (a==a2) //两数组地址一样返回true
return true;
if (a==null || a2==null) // 如果两数组任一数组为null 返回false
return false;
int length = a.length; //如果长度不同 ,返回false
if (a2.length != length)
return false;
for (int i=0; i<length; i++) //一一对比,如果有一个不一样返回false
if (a[i] != a2[i])
return false;
return true; //到这里还没返回,那么返回true
}