Java中的Arrays,这一篇就够了
哈喽,大家好,我是了不起。
JDK中提供了一个专门用于操作数组的工具类,即Arrays类,位于java.util 包中。
常用方法
返回类型 |
方法 |
说明 |
String |
toString(array) |
将数组array转换成字符串 |
void |
sort(array) |
对数组进行升序排列。注意:排序算法是由Vladimir Yaroslavskiy,Jon Bentley和Joshua Bloch提供的双轴快速排序。 |
void |
fill(arr,val) |
将数组arr全部元素赋值为val |
boolean |
equals(arr1,arr2) |
判断两个数组是否相等 |
与arr类型相同 |
copyOf(arr,length) |
将数组arr复制成一个长度为length的新数组 |
int |
binarySearch(arr, val) |
查询元素val在arr中的下标值 |
示例代码
public class Test {
public static void main(String[] args) {
int a[]={12,20,13,42,72,26,35,10,46,26,53};
int b[]={3,5,7,8,54,23,9};
int c[]={3,5,7,8,54,23,9};
String str=Arrays.toString(a); //将特定数组转换成字符串
System.out.println("字符串:"+str);
Arrays.sort(a); //对数组array的元素进行升序排列
System.out.println("排序后:"+Arrays.toString(a));
Arrays.fill(a,10); //所以元素都赋值成特定值
System.out.println("赋值后:"+Arrays.toString(a));
boolean boo=Arrays.equals(a,b); //判断两个数组是否相等(对应位置上的元素是否相等)
boolean boo2=Arrays.equals(b, c);
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("c:"+c);
System.out.println("ab相等?"+boo);
System.out.println("bc相等?"+boo2);
int d[]=Arrays.copyOf(b,b.length); //把数组复制成特定长度的数组,与直接赋值(引用传递)不同
System.out.println("d:"+Arrays.toString(d));
System.out.println("d:"+d);
System.out.println("b:"+b);
int i=Arrays.binarySearch(b, 5); //查询特定因素在数组中的下标
System.out.println("下标是:"+i);
}
}
运行结果:
字符串:[12,20,13,42,72,26,35,10,46,26,53]排序后:[10,12,13,20,26,26,35,42,46,53,72]賦值后:「10,10,10,10,10,10,10,10,10,10,10]
a:[I@1606bf5b:[I@14fcc96
c:[I@bcbc
ab相等?false
bc相等?true
d:[3,5,7,8,54,23,9]d:[I@671416b:[I@14fcc96
下標是:1
源码解析
将数组array转换成字符串
public static String toString(int[] a)
int[] arr = { 24, 69, 80, 57, 13 };
System.out.println("排序前:" + Arrays.toString(arr));
public static String toString(int[] a) {
//a -- arr -- { 24, 69, 80, 57, 13 }
if (a == null)
return "null"; //说明数组对象不存在
int iMax = a.length - 1; //iMax=4;
if (iMax == -1)
return "[]"; //说明数组存在,但是没有元素。
StringBuilder b = new StringBuilder();
b.append('['); //"["
for (int i = 0; ; i++) {
b.append(a[i]); //"[24, 69, 80, 57, 13"
if (i == iMax)
//"[24, 69, 80, 57, 13]"
return b.append(']').toString();
b.append(", "); //"[24, 69, 80, 57, "
}
}
二分查找
public static int binarySearch(int[] a,int key)
int[] arr = {13, 24, 57, 69, 80};
System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577));
public static int binarySearch(int[] a, int key) {
//a -- arr -- {13, 24, 57, 69, 80}
//key -- 577
return binarySearch0(a, 0, a.length, key);
}
private static int binarySearch0(int[] a, int fromIndex, int toIndex,
int key) {
//a -- arr -- {13, 24, 57, 69, 80}
//fromIndex -- 0
//toIndex -- 5
//key -- 577
int low = fromIndex; //low=0
int high = toIndex - 1; //high=4
while (low >> 1; //mid=2,mid=3,mid=4
int midVal = a[mid]; //midVal=57,midVal=69,midVal=80
if (midVal key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
复制
public static int[] copyOf(int[] original, int newLength)
public static T[] copyOf(U[] original, int newLength, Class