Java 数组最佳指南,快收藏让它吃灰 (2)

所以我们其实可以直接将数组作为参数传递给可变参数的方法:

VarargsDemo demo = new VarargsDemo();
String[] anArray = new String[] {"沉默王二""一枚有趣的程序员"};
demo.varargsMethod(anArray);

也可以直接传递多个字符串,通过逗号隔开的方式:

demo.varargsMethod("沉默王二""一枚有趣的程序员");
05、把数组转成 List

List 封装了很多常用的方法,方便我们对集合进行一些操作,而如果直接操作数组的话,多有不便,因此有时候我们需要把数组转成 List。

最原始的方式,就是通过遍历数组的方式,一个个将数组添加到 List 中。

int[] anArray = new int[] {12345};

List<Integer> aList = new ArrayList<>();
for (int element : anArray) {
    aList.add(element);
}

更优雅的方式是通过 Arrays 类的 asList() 方法:

List<Integer> aList = Arrays.asList(anArray);

但需要注意的是,该方法返回的 ArrayList 并不是 java.util.ArrayList,它其实是 Arrays 类的一个内部类:

private static class ArrayList<Eextends AbstractList<E>
        implements RandomAccessjava.io.Serializable
{}

如果需要添加元素或者删除元素的话,最好把它转成 java.util.ArrayList。

new ArrayList<>(Arrays.asList(anArray));
06、把数组转成 Stream

Java 8 新增了 Stream 流的概念,这就意味着我们也可以将数组转成 Stream 进行操作,而不是 List。

String[] anArray = new String[] {"沉默王二""一枚有趣的程序员""好好珍重他"};
Stream<String> aStream = Arrays.stream(anArray);

也可以直接对数组的元素进行剪辑,通过指定索引的方式:

Stream<String> anotherStream = Arrays.stream(anArray, 13);

结果包含"一枚有趣的程序员"和"好好珍重他",1 这个索引位置包括,3 这个索引位置不包括。

07、数组排序

Arrays 类提供了一个 sort() 方法,可以对数组进行排序。

基本数据类型按照升序排列

实现了 Comparable 接口的对象按照 compareTo() 的排序

来看第一个例子:

int[] anArray = new int[] {52148};
Arrays.sort(anArray);

排序后的结果如下所示:

[12458]

来看第二个例子:

String[] yetAnotherArray = new String[] {"A""E""Z""B""C"};
Arrays.sort(yetAnotherArray, 13,
                Comparator.comparing(String::toString).reversed());

只对 1-3 位置上的元素进行反序,所以结果如下所示:

[A, Z, E, B, C]
08、数组搜索

有时候,我们需要从数组中查找某个具体的元素,最直接的方式就是通过遍历的方式:

int[] anArray = new int[] {52148};
for (int i = 0; i < anArray.length; i++) {
    if (anArray[i] == 4) {
        System.out.println("找到了 " + i);
        break;
    }
}

上例中从数组中查询元素 4,找到后通过 break 关键字退出循环。

如果数组提前进行了排序,就可以使用二分查找法,这样效率就会更高一些。Arrays.binarySearch() 方法可供我们使用,它需要传递一个数组,和要查找的元素。

int[] anArray = new int[] {12345};
int index = Arrays.binarySearch(anArray, 4);
09、总结

除了一维数组,还有二维数组,但说实话,二维数组不太常用,这里就不再介绍了,感兴趣的话,可以尝试打印以下杨辉三角。

这篇文章,我们介绍了 Java 数组的基本用法和一些高级用法,我想小伙伴们应该已经完全掌握了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpddzw.html