Java提供的Arrays类里包含了一些static修饰的方法可以直接操作数组,这个Arrays类里包含了如下几个static修饰的方法:
1),static type binarySearch(type[] a, type key)
Searches the specified array of bytes for the specified value using the binary search algorithm.
使用二分法查询key元素值在a数组中出现的索引,如果a数组不包含key元素值,则返回负数(-数组的长度-1)。
调用该方法时要求数组中元素已经按升序排列,这样才能得到正确结果。
2),static type binarySearch(type[] a, int fromIndex, int toIndex, type key)
Searches a range of the specified array of bytes for the specified value using the binary search algorithm.
该方法与前一个方法类型,但它只搜索a数组中的fromIndex到toIndex索引的元素。
调用该方法时要求数组中元素已经按升序排列,这样才能得到正确结果。
import java.util.Arrays;
/**
* Arrays工具类的使用
*
* @author LinkinPark
*/
public class ArraysTest
{
public static void main(String[] args)
{
int[] arr = { 1, 2, 4, 3, 5 };
// 使用binarySearch,要先对数组做升序排序
Arrays.sort(arr);
// 数组升序排序,下行代码输出[1, 2, 3, 4, 5]
System.out.println(Arrays.toString(arr));
// 4出现的索引为3,下行代码输出3
System.out.println(Arrays.binarySearch(arr, 4));
// 数组不包含6,输出-arr.length-1,下行代码输出-6
System.out.println(Arrays.binarySearch(arr, 6));
// 数组索引从0到2,查找1的索引,下面代码输出0
System.out.println(Arrays.binarySearch(arr, 0, 2, 1));
// 索引从0到2的数组不包含6,输出-arr.length-1,下行代码输出-3
System.out.println(Arrays.binarySearch(arr, 0, 2, 6));
}
}
3),static <T> T[] copyOf(T[] original, int newLength)
Copies the specified array, truncating or padding with nulls (if necessary) so the copy has the specified length.
这个方法将会把original数组复制成一个新数组,其中length是新数组的长度。
如果length小于original数组的长度,则新数组就是原来数组的前面length个元素。
如果length大于original数组的长度,则新数组的前面元素就是原数组的所有元素,后面补充0,false,或者null。
4),static <T> T[] copyOfRange(T[] original, int from, int to)
Copies the specified range of the specified array into a new array.
这个方法与前面方法相似,但这个方法值复制original数组的from索引到to索引的元素。
import java.util.Arrays;
/**
* Arrays工具类的使用
*
* @author LinkinPark
*/
public class ArraysTest
{
public static void main(String[] args)
{
int[] arr = { 1, 2, 3, 4, 5 };
// 新的数组长度大于arr数组,后面用0补齐。[1, 2, 3, 4, 5, 0]
int[] copyArr1 = Arrays.copyOf(arr, 6);
System.out.println(Arrays.toString(copyArr1));
// 新的数组长度小于arr数组,截取新数组的长度。[1, 2, 3]
int[] copyArr2 = Arrays.copyOf(arr, 3);
System.out.println(Arrays.toString(copyArr2));
// 截取arr数组下标从1到3形成一个新的数组。[2, 3]
int[] copyArr3 = Arrays.copyOfRange(arr, 1, 3);
System.out.println(Arrays.toString(copyArr3));
}
}
5),static void
fill(type[] a, type val)
Assigns the specified int value to each element of the specified array of ints.
该方法将会把a数组的所有元素都赋值为val。
6),static void fill(type[] a, int fromIndex, int toIndex, type val)
Assigns the specified int value to each element of the specified range of the specified array of ints.
该方法与前一个方法的作用相同,区别只是该方法仅仅将a数组的fromIndex到toIndex索引的数组元素赋值为val。
import java.util.Arrays;
/**
* Arrays工具类的使用
*
* @author LinkinPark
*/
public class ArraysTest
{
public static void main(String[] args)
{
int[] arr = { 1, 2, 3, 4, 5 };
// 将数组arr全部赋值为6。[6, 6, 6, 6, 6]
Arrays.fill(arr, 6);
System.out.println(Arrays.toString(arr));
int[] arr1 = { 1, 2, 3, 4, 5 };
// 将数组arr1,索引从1到4,赋值为6 [1, 6, 6, 6, 5]
Arrays.fill(arr1, 1, 4, 6);
System.out.println(Arrays.toString(arr1));
}
}
7),static boolean equals(type[] a, type[] a2)
Returns true if the two specified arrays of ints are equal to one another.
如果a数组和a2数组的长度相等,而且a数组和a2数组的数组元素也一一相同,该方法将返回true。
8),static String toString(type[] a)
Returns a string representation of the contents of the specified array.
该方法将一个数组转换成一个字符串,该方法按顺序把多个数组元素连缀在一起,多个数组元素使用英文逗号和空格隔开。
9),static void sort(type[] a)
Sorts the specified array into ascending numerical order.
该方法对a数组的数组元素进行排序。
10),static <T> List<T> asList(T... a)
Returns a fixed-size list backed by the specified array.
返回一个受指定数组支持的固定大小的列表,(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之
间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。
此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
import java.util.Arrays;
import java.util.List;
/**
* Arrays工具类的使用
*
* @author LinkinPark
*/
public class ArraysTest
{
public static void main(String[] args)
{
// 判断arr1和arr2是否相等,下面代码输出true
int[] arr1 = { 1, 2, 3, 4, 5 };
int[] arr2 = { 1, 2, 3, 4, 5 };
System.out.println(Arrays.equals(arr1, arr2));
// 将一个可变参数的数组转换成一个数组,[1, 2, 3, 4, 5]
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
System.out.println(list.toString());
}
}
11),static XxxStream stream(xxx[] array)
Returns a sequential IntStream with the specified array as its source.
该方法将数组转换为Stream,Stream是Java8新增的流式编程的API。
12),static XxxStream stream(xxx[] array, int startInclusive, int endExclusive)
Returns a sequential IntStream with the specified range of the specified array as its source.
该方法与上一个方法相似,区别是该方法仅将startInclusive到endExclusive索引的元素转换成Stream。
13),还有一些以parallel(并行)开头的方法都表示该方法可利用CPU并行的能力来提高性能,比如parallelSort等等。