版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18948359/article/details/85214106
Arrays 类
Arrays 类 是操作数组的类,被定义在 java.util 包中,主要功能是实现数组元素的查找、数组内容的填充、排序等。Arrays 类提供的方法都是 static 方法。
常用的方法:
产生新的数组:
<T> List<T> asList(T... a)
: 将传入的参数变成数组(可以是任意的类型)。type[] copyOf(type[] original, int newLength)
: 这个方法将会把 original 数组复制成一个新的数组,length 是新数组的长度。- 如果 newlength < original.length,则新数组就是 original 前面 length 个元素。
- 如果 newlength > original.length,则新数组的前面元素就是原数组的所有元素,后面补充 0(数值类型)、false(boolean类型)或者 null(引用类型)
type[] copyOfRange(type[] original, int from, int to)
: 这个方法与前面方法相似,单这个方法只赋值 original 中 from 到 to 元素索引值的元素。
二分查找:
int binarySearch(byte[] a, byte key)
:使用二分查找元素 key 在 a 数组中出现的索引;如果 a 数组不包含 key 元素,则返回负数。调用该方法时,要就数组中的元素已经升序排列。int binarySearch(byte[] a, int fromIndex, int toIndex, byte key)
: 这个方法与前面一个方法类似,但是它只搜索 a 数组中 fromIndex 到 toIndex 索引的元素。调用该方法时,要就数组中的元素已经升序排列。
排序:
void sort(type[] a)
:该方法对 a 数组进行排序。void sort(type[] a, int fromIndex, int toIndex)
:与前一个方法作用相同,区别是只是将 fromIndex 到 toIndex 索引位置的元素进行排序。该方法对 a 数组进行排序。
填充值以及其他方法:
void fill(type[] a, type val)
: 该方法将会把 a 数组的所有元素都赋值为 val。void fill(type[] a, int fromIndex, int toIndex, type val)
:该方法与前面一个方法的作用相同,区别在于只是将 fromIndex 到 toIndex 索引位置的元素赋值为 val。boolean equals(type[] a, type[] a2)
:如果 a 数组和 a2 数组的长度相等,并且 a数组和 a2 数组的元素也一一相同,改方法将返回 true。String toString(type[] a)
: 该方法将数组变为 String 类型。
import java.util.Arrays;
public class ArraysTest {
public static void main(String[] args) {
/** 数组的比较 **/
String[] str1 = { "1", "2", "3" };
String[] str2 = { "1", "2", new String("3") };
// 数组的长度相等,元素依次相等
System.out.println(Arrays.equals(str1, str2)); // true
/** 使用 copyOf 方法赋值数组 **/
int[] a = new int[] { 3, 34, 5, 8, 2 };
int[] b = Arrays.copyOf(a, 4);
int[] c = Arrays.copyOf(a, 8);
System.out.println(Arrays.toString(b)); // [3, 34, 5, 8]
System.out.println(Arrays.toString(c)); // [3, 34, 5, 8, 2, 0, 0, 0]
/** 使用 fill 方法 **/
// 从第1个索引开始(包括),到3个索引位置(不包括)
Arrays.fill(b, 1, 3, 1);
System.out.println(Arrays.toString(b)); // [1, 1, 1, 8]
/** 使用 sort 排序 **/
Arrays.sort(a);
System.out.println(Arrays.toString(a)); // [2, 3, 5, 8, 34]
/** 使用 binarySearch **/
// binarySearch:通过二分法的方式找对应元素的下标, 使用前提:必须经过排序才可以使用
char[] aChar = { 'a', 'b', 'c', 'd', 'e' };
int i = Arrays.binarySearch(aChar, 'd');
System.out.println(i);// 3
char[] bChar = { 'e', 'a', 'c', 'b', 'd' };
Arrays.sort(bChar);
int j = Arrays.binarySearch(bChar, 'e');
System.out.println(j); // 4
}
}
注
Java 8 增强了 Arrays 类的功能,为 Arrays 类增加了一些工具方法,这些工具类方法可以充分利用多CPU 并行的能力来提供设置值、排序的性能。相当于之前的方法名是以 parallel 开头,下面列举一部分:
执行表达式:
void setAll(long[] array, IntToLongFunction generator)
:使用指定的生成器(generator)为所有的数组元素设置值。void parallelSetAll(long[] array, IntToLongFunction generator)
:和上面的方法一样,区别在于增加了并行能力,可以利用多 CPU 并行来提高性能。
排序:
void parallelSort(type[] a)
:该方法对 a 数组进行并行排序。void parallelSort(type[] a, int fromIndex, int toIndex)
:与前一个方法作用相同,区别是只是将 fromIndex 到 toIndex 索引位置的元素进行并行排序。该方法对 a 数组进行排序。
stream 流:
- XxxStream stream(xxx[] array):该方法将数组转换为 Stream。
import java.util.Arrays;
public class ArraysTest {
public static void main(String[] args) {
int[] array = { 6, 1, 9, 2, 5, 7 };
/** setAll 操作 **/
int[] setAllArr = Arrays.copyOf(array, array.length);
Arrays.setAll(setAllArr, a -> a * 3);
System.out.println(Arrays.toString(setAllArr)); // [0, 3, 6, 9, 12, 15]
Arrays.parallelSort(array);
System.out.println(Arrays.toString(array)); // [1, 2, 5, 6, 7, 9]
}
}