此类包含用来操作数组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);
}
}<span style="color:#ff0000;">
</span>
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
public static arr[] copyOfRange(arr[] original,int from, int to)
将指定数组的指定范围复制到一个新数组。该范围的初始索引 (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,也就是说左闭右开。
<pre name="code" class="java">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));
}
}
5.填充数组fill
public static void fill(arr[] a,int fromIndex,int toIndex,char val)将指定的 值分配给指定类型型数组指定范围中的每个元素。填充的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。(如果 fromIndex==toIndex,则填充范围为空。)
参数:
a - 要填充的数组
fromIndex - 要使用指定值填充的第一个元素的索引(包括)
toIndex - 要使用指定值填充的最后一个元素的索引(不包括)
val - 要存储在数组所有元素中的值
ps:返回值是void
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]);
}
}
}
6.排序sort
public static void sort(arr[] a,int fromIndex, int toIndex)对指定 byte 型数组的指定范围按数字升序进行排序。排序的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。(如果 fromIndex==toIndex,则排序范围为空。)
该排序算法是一个经过调优的快速排序法,改编自 Jon L. Bentley 和 M. Douglas McIlroy 合著的 Engineering a Sort Function", Software-Practice and Experience Vol. 23(11) P. 1249-1265 (November 1993)。此算法在许多数据集上提供 n*log(n) 性能,这导致其他快速排序会降低二次型性能。
参数:
a - 要排序的数组
fromIndex - 要排序的第一个元素的索引(包括)
toIndex - 要排序的最后一个元素的索引(不包括)
ps:仅有升序排列,倒序需要自己做调整,左闭右开,所有元素排序,不填参数即可!</span>
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]+" ");
}
}
}
7.转换为字符串toString
public static String toString(arr[] a)返回指定数组内容的字符串表示形式。字符串表示形式由数组的元素列表组成,括在方括号("[]")中。相邻元素用字符 ", "(逗号加空格)分隔。这些元素通过 String.valueOf(boolean) 转换为字符串。如果 a 为 null,则返回 "null"。
参数:
a - 返回其字符串表示形式的数组
返回:
a 的字符串表示形式
ps:返回值为字符串。如果a为null,则返回null;表现形式与自己定义的略有不同, 例子[1,2,3,4,5,6],如果数组中有null,转变成字符串也是null。
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);
}
}