欢迎访问欧博亚洲(Allbet Game)!

首页科技正文

欧博亚洲官方注册:Java 数组最佳指南,快珍藏让它吃灰

admin2020-06-2741

两年前,我甚至写过一篇文章,吐槽数组在 Java 中挺鸡肋的,由于有 List 谁用数组啊,现在想想那时刻的自己好稚子,好可笑。由于我只看到了表面现象,实际上呢,List 的内部仍然是通过数组实现的,比如说 ArrayList,在它的源码里可以看到下面这些内容:

/**
 * The array buffer into which the elements of the ArrayList are stored.
 * The capacity of the ArrayList is the length of this array buffer. Any
 * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
 * will be expanded to DEFAULT_CAPACITY when the first element is added.
 */

transient Object[] elementData; // non-private to simplify nested class access

/**
 * The size of the ArrayList (the number of elements it contains).
 *
 * @serial
 */

private int size;

数组在 Java 中,必须算是焦点,神一样平常的存在。

01、什么是数组

根据 Javadoc 给出的注释,数组是一个工具,它包罗了一组牢固数目的元素,而且这些元素的类型是相同的。数组会根据索引的方式将元素放在指定的位置上,意味着我们可以通过索引来接见到这些元素。在 Java 中,索引是从 0 最先的。

我们可以将数组理解为一个个整齐排列的单元格,每个单元格内里存放着一个元素。

数组元素的类型可以是基本数据类型(比如说 int、double),也可以是引用数据类型(比如说 String),包罗自界说类型的工具。

了解了数组的界说后,让我们来深入地研究一下数组的用法。

在 Java 中,数组的声明方式有两种。

先来看第一种:

int[] anArray;

再来看第二种:

int anOtherArray[];

不同之处就在于中括号的位置,是紧跟类型,照样放在变量名的后面。前者比后者的使用频率更高一些。

接下来就该看看怎么初始化数组了,同样有多种方式可以初始化数组,比如说最常见的是:

int[] anArray = new int[10];

使用了 new 关键字,对吧?这就意味着数组的确是一个工具。然后,在方括号中指定了数组的长度,这是必须的。

这时刻,数组中的每个元素都会被初始化为默认值,int 类型的就为 0,Object 类型的就为 null。

另外,还可以使用大括号的方式,直接初始化数组中的元素:

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

这时刻,数组的元素分别是 1、2、3、4、5,索引依次是 0、1、2、3、4。

02、接见数组

前面提到过,可以通过索引来接见数组的元素,就像下面这样:

anArray[0] = 10;
System.out.println(anArray[0]);

通过数组的变量名,加上中括号,加上元素的索引,就可以接见到数组,通过“=”操作符举行赋值。

若是索引的值超出了数组的界线,就会抛出 ArrayIndexOutOfBoundException,关于这方面的知识,我之前特意写过一篇文章,若是你感兴趣的话,可以跳转已往看看。

为什么会发生ArrayIndexOutOfBoundsException

我以为缘故原由挺有意思的。

既然数组的索引是从 0 最先,那就是到数组的 length - 1 竣事,不要使用超出这个范围内的索引接见数组,就不会抛出数组越界的异常了。

03、遍历数组

当数组的元素异常多的时刻,逐个接见数组就太辛苦了,以是需要通过遍历的方式。

第一种,使用 for 循环:

int anOtherArray[] = new int[] {12345};
for (int i = 0; i < anOtherArray.length; i++) {
    System.out.println(anOtherArray[i]);
}

通过 length 属性获取到数组的长度,然后索引从 0 最先遍历,就得到了数组的所有元素。

第二种,使用 for-each 循环:

for (int element : anOtherArray) {
    System.out.println(element);
}

若是不需要体贴索引的话(意味着不需要修改数组的某个元素),使用 for-each 遍历更简练一些。固然,也可以使用 while 和 do-while 循环。

04、可变参数

可变参数用于将随便数目的参数通报给方式:

void varargsMethod(String... varargs) {}

varargsMethod() 方式可以通报随便数目的字符串参数,可以是 0 个或者 N 个,本质上,可变参数就是通过数组实现的,为了证实这一点,我们可以通过 jad 反编译一下字节码:

public class VarargsDemo
{

    public VarargsDemo()
    
{
    }

    transient void varargsMethod(String as[])
    
{
    }
}

以是我们实在可以直接将数组作为参数通报给可变参数的方式:

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 数组的基本用法和一些高级用法,我想小伙伴们应该已经完全掌握了。

我是缄默王二,一枚有趣的程序员。若是以为文章对你有点辅助,请微信搜索「 缄默王二 」第一时间阅读。

本文 GitHub 已经收录,有大厂面试完整考点,迎接 Star。

原创不易,莫要白票,请你为本文点个赞吧,这将是我写作更多优质文章的最强动力。

,

欧博亚洲电脑版下载

欢迎进入欧博亚洲电脑版下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源:欧博亚洲(Allbet Game)!

本文链接:https://www.chezhijia398.com/post/926.html

网友评论

最新评论

  • 联博以太坊高度 10/24 说:

    欧博APP欢迎进入欧博APP(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。这类型很少见啊

  • 联博以太坊高度 10/24 说:

    欧博APP欢迎进入欧博APP(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。这类型很少见啊

  • UG环球 10/23 说:

    Allbet Gmaing代理欢迎进入Allbet Gmaing代理(www.aLLbetgame.us):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。一定一定要看这个!

  • 环球UG电脑版下载 10/23 说:

    欧博APP下载欢迎进入欧博APP下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。写作能力max!

  • Allbet官网 10/23 说:

    联博开奖网www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。我是看文小能手

  • 联博 10/23 说:

    欧博亚洲APP下载欢迎进入欧博亚洲APP下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。前来围观

  • ALLBET官网娱乐平台开户 10/23 说:

    Allbet注册欢迎进入Allbet注册(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。都给我看好看的文!

  • 环球UG官网 10/22 说:

    欧博亚洲手机版下载欢迎进入欧博亚洲手机版下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。这网站的都挺好看