java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用。
该类包含用于操作数组的各种方法(如排序和搜索)。该类还包含一个静态工厂,可以将数组视为列表。
如果指定的数组引用为空,则该类中的方法都抛出一个NullPointerException
,除非另有说明。
具有以下功能:
给数组赋值:通过fill方法。
对数组排序:通过sort方法,按升序
比较数组: 通过equals方法比较数组中元素值是否相等。
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
截取数组元素:通过copyOf方法和copyOfRange对数组元素进行截取。
打印数组元素:通过toString方法打印数组元素。
将数组转换为list:通过asList方法转换为List。
1.asList
可以将一个变长参数或者数组转换成List。(生成的List的长度是固定的;能够进行修改操作;不能执行影响长度的操作(如add、remove等,否则会抛出异常)
Integer[] number = {1,2,4,3,2,1,5};
List<Integer> list = Arrays.asList(number);
System.out.println(list);
System.out.println(list.size());
2.sort
用于数组排序
int[] num = {6,7,4,5,2};
Arrays.sort(num);
System.out.println(Arrays.toString(num));//[2,4,5,6,7]
3.binarySearch
用二分法查找数组中的某个元素。
注意:二分法是对有序的数组进行查找(比如先用Arrays.sort()进行排序,然后调用此方法进行查找)。找到元素返回下标,没有则返回-1.
int[] num = {6,7,4,5,2};
Arrays.sort(num);
System.out.println(Arrays.toString(num));//[2,4,5,6,7]
System.out.println(Arrays.binarySearch(num,2));//返回元素的下标0
4.copyOf
拷贝数组元素。底层采用 System.arraycopy() 实现,这是一个native方法。
public static native void arraycopy(Object src,int srcPos,Object dest, int destPos,int length);
src:源数组
srcPos:源数组要复制的起始位置
dest:目的数组
destPos:目的数组放置的起始位置
length:复制的长度
注意:src 和 dest都必须是同类型或者可以进行转换类型的数组。
int[] num1 = {1,2,3,4};
int[] num2 = new int[3];
System.arraycopy(num1, 0, num2, 0, num1.length);
System.out.println(Arrays.toString(num2));//[1,2,3,4]
5.equals和deepEquals
equals用来比较两个数组中对应位置的每个元素是否相等。
deepEquals也是用来比较两个数组的元素是否相等,不过deepEquals能够进行比较多维数组,而且是任意层次的嵌套数组。
String[][] str1 = {{ "y","u","e" },{ "a","n"},{ "i","e"}};
String[][] str2 = {{ "y","u","e" },{ "a","n"},{ "i","e"}};
System.out.println(Arrays.equals(name1,name2));// false
System.out.println(Arrays.deepEquals(name1,name2));// true
6.fill
给数组赋值,并且可以指定某个范围
//给a数组所有元素赋值 val
public static void fill(int[] a, int val) {
for (int i = 0, len = a.length; i < len; i++)
a[i] = val;
}
int[] num = {1,2,6,5,4,3};
Arrays.fill(num,4);
System.out.println(Arrays.toString(num));//[4, 4, 4, 4, 4, 4]
//给从 fromIndex 开始的下标,toIndex-1结尾的下标都赋值 val,左闭右开
public static void fill(int[] a, int fromIndex, int toIndex, int val) {
rangeCheck(a.length, fromIndex, toIndex);//判断范围是否合理
for (int i = fromIndex; i < toIndex; i++)
a[i] = val;
}
Arrays.fill(num,1,3,6);
System.out.println(Arrays.toString(num));//[4, 6, 6, 4, 4, 4]
7.toString和deepToString
toString用来打印一维数组的元素,而deepToString用来打印多层嵌套的数组元素。