此类包含用来操作数组binary Search(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
都是静态方法,直接用类名Arrays调用。
比较常用的有:1.折半查找法binarySearch2.拷贝数组copyOf3.指定范围复制数组copyOfRange4.比较equals5.填充数组fill6.排序sort7.转换为字符串toString
1.折半查找法binarySearch
public static int binarySearch(arr[] a, key)
使用二分搜索法来搜索指定的类型的数组,以获得指定的值。必须在进行此调用之前对数组进行排序(通过 sort(arr []) 方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。
参数:
arrr [] a - 要搜索的数组
key - 要搜索的值
ps:必须是有序的数组,正常情况下返回值为key的索引,不正常情况下返回返回 (-(插入点) - 1)。如果包含多个相同的值,返回的结果是不确定的。
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int [] arr ={1,2,3,4,5,7,8,9};
int temp=Arrays.binarySearch(arr,6 );
System.out.println(temp);
}
}
2.拷贝数组copyOf
public static arr[] copyOf(arr [] original, int newLength)
复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。对于在原数组和副本中都有效的所有索引,这两个数组将包含相同的值。对于在副本中有效而在原数组无效的所有索引,副本将包含 0d。当且仅当指定长度大于原数组的长度时,这些索引存在。
参数:
original - 要复制的数组
newLength - 要返回的副本的长度
返回:
原数组的副本,截取或用 0 填充以获得指定的长度
ps: newLength是需要复制的长度,小于源数组时,新数组是截取后的数组,大于源数组时新数组是填充0后的数组。返回值为一个数组
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5, 7, 8, 9 };
int arr1[] = Arrays.copyOf(arr, 10);
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
}
}
3.指定范围复制数组copyOfRange
将指定数组的指定范围复制到一个新数组。该范围的初始索引 (from) 必须位于 0 和 original.length(包括)之间。original[from] 处的值放入副本的初始元素中(除非 from == original.length 或 from == to)。原数组中后续元素的值放入副本的后续元素。该范围的最后索引 (to)(必须大于等于 from)可以大于 original.length,在这种情况下,0d 被放入索引大于等于 original.length - from 的副本的所有元素中。返回数组的长度为 to - from。
参数:
original - 将要从其复制一个范围的数组
from - 要复制的范围的初始索引(包括)
to - 要复制的范围的最后索引(不包括)。(此索引可能位于数组范围之外)。
返回:
包含取自原数组指定范围的新数组,截取或用 0 填充以获得所需长度
ps:to不能理解为你需要复制的长度,而是你需要复制的最后一位的下标+1,也就是说左闭右开。
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5, 7, 8, 9 };
int arr1[] = Arrays.copyOfRange(arr, 0, 1);
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
}
}
4.比较equals
public static boolean equals(arr[] a,arr[] a2)如果两个指定的 类型的数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。此外,如果两个数组引用都为 null,则认为它们是相等的。
参数:
a - 将测试其相等性的一个数组
a2 - 将测试其相等性的另一个数组
返回:
如果两个数组相等,则返回 true
ps:返回值类型是boolean类型,必须要值与下标均相同或者应用均为null才会返回true,否则返回false.
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5, 7, 8, 9 };
int [] arr2 = {1,2,3,4,5,7,8,9};
System.out.println(Arrays.equals(arr, arr2));
}
}
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int [] arr =new int [5];
Arrays.fill(arr, 0, 1, 99);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int arr [] ={1,2,4,8,2,4,6,9,1,2,7};
Arrays.sort(arr, 0, arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
String arr [] ={"12","23",null,"24",null};
String b = "5252637";
String a =Arrays.toString(arr);
System.out.println(a);
}
}