Arrays用法

1、Arrays的静态方法

Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组(static修饰的方法可以直接通过类名调用),具体如下表所示。

静态方法 解释
int binarySearch(type[] a,type key) 使用二分法查询key元素值在a数组中出现的索引。若a数组中不包含key元素,则返回负数。调用该方法前提:要求数组中元素已按升序排列
int binarySearch(type[] a,int formIndex,int toIndex,type key) 与上面的方法类似,但它只搜索a数组中formIndextoIndex索引的元素。调用该方法前提:要求数组中元素已按升序排列
type[] copyOf(type[] original,int length) 这个方法将会把original数组复制成一个新数组,其中length是新数组的长度。若length小于original数组的长度,则新数组就是原数组前面length个元素;反之,则为原数组后面补0(数值类型)、false(布尔类型)或者null(引用类型)。
type[] copyOfRange(type[] original,int from,int to) 该方法与上面的方法类似,但仅复制original数组的from索引到to索引的元素。
Boolean equals(type[] a,type[] a2) 若数组a和数组a2的长度相等,并且数组元素也一一相同,则返回true。
void fill(type[] a,type val) 将数组a所有元素赋值为val
void fill(type[] a,int formIndex,int toIndex,type val) 与上面的方法类似,将数组a的formIndextoIndex索引的的元素赋值为val
void sort(type[] a) 对数组a的数组元素进行排序
void sort(type[] a,int formIndex,int toIndex) 仅对数组a的formIndextoIndex索引的的元素进行排序
String toString(type[] a) 该方法是将数组转换成一个字符串。该方法按顺序把多个数组元素连缀在一起,元素之间用英文逗号和空格隔开。

下面为代码演示。

public class ArraysTest {
    public static void main(String[] args) {
        int[] a = {3, 7, 6, 1, 2};

        int[] b = {3, 7, 6, 1, 2};

        System.out.println("数组a和数组b是否相同" + Arrays.equals(a, b));

        int[] c = Arrays.copyOf(a, 6);

        System.out.println("数组a和数组c是否相同" + Arrays.equals(a, c));

        System.out.println("数组c的元素为:" + Arrays.toString(c));

        //将数组c的第三个元素(包括)到第五个元素(不包括)赋值为1
        Arrays.fill(c, 2, 4, 1);

        System.out.println("数组c的元素为:" + Arrays.toString(c));

        Arrays.sort(c);

        System.out.println("数组c的元素为:" + Arrays.toString(c));
    }
}

结果如下所示。

2、Java 8增强的Arrays

Java8中增强了Arrays类的功能,为Arrays类增加了一些工具方法,这些工具方法可以充分利用多CPU并行的能力来提高设值、排序的性能。

由于计算机硬件的飞速发展,目前几乎所有的家用PC都是4核、8核的CPU,而服务器的CPU则具有更好的性能,因此Java 8与时俱进地增加了并发支持,这样便可以充分利用硬件设备来提高程序的运行性能。

方法 解释
void parallelPrefix(xxx[] array,XxxBinaryOperator op) 该方法使用op参数指定的计算公式计算得到的结果作为新的元素。op计算公式包括leftright两个形参,其中left代表数组中请一个索引处的元素,right代表数组中当前索引处的元素,当计算第一个新数组元素时,left的值默认为1
void parallelPrefix(xxx[] array,int formIndex,int toIndex,type key,XxxBinaryOperator op) 与上一个方法类似,区别为仅重新计算formIndextoIndex索引的元素。
void setAll(xxx[] array,IntToXxxFuncton generator) 该方法使用指定的生成器(generator)为所有数组元素设置值,该生成器控制数组元素的值的生成算法。
void parallelSetAll(xxx[] array,IntToXxxFuncton generator) 该方法与上一个方法功能相同,仅增加了并行能力,可以利用多CPU并行来提高性能。
void parallelSort(xxx[] array) 该方法与之前的sort方法功能相同,仅增加了并行能力,
void parallelSort(xxx[] array,int formIndex,int toIndex) 与上一个方法类似,区别为仅对formIndextoIndex索引的元素进行排序。
Spliterator.OfXxx spliterator(xxx[] array) 将该数组的所有元素转换成对应的Spliterator对象。
Spliterator.OfXxx spliterator(xxx[] array,int startInclusive,int endInclusive) 与上一个方法类似,,,
XxxStream stream(xxx[] array) 该方法将数组转换为StreamStream是Java 8中新增流式编程的API。
XxxStream stream(xxx[] array,int startInclusive,int endInclusive) 与上一个方法类似,,,
public class ArraysTest2 {
    public static void main(String[] args) {
        int[] a = {3, -4, 25, 16, 30, 18};
        //对数组进行并发排序
        Arrays.parallelSort(a);
        System.out.println(Arrays.toString(a));

        int[] b = {3, -4, 25, 16, 30, 18};
        Arrays.parallelPrefix(b, new IntBinaryOperator() {
            @Override
            public int applyAsInt(int left, int right) {
                return left * right;
            }
        });
        System.out.println(Arrays.toString(b));

        int[] c = new int[5];
        Arrays.parallelSetAll(c, new IntUnaryOperator() {
            @Override
            public int applyAsInt(int operand) {
                return operand;//operand代表正在计算的元素索引
            }
        });
        System.out.println(Arrays.toString(c));
    }
}

运算结果如下:

说明:该程序中Arrays.parallelPrefix(b, IntBinaryOperator op)计算方法为:

1*3=3;3*-4=-12;-12*25=-300;-300*16=-4800;-4800*30=-144000;-144000*18=-2592000

猜你喜欢

转载自blog.csdn.net/chaixingsi/article/details/82931622