当前位置: 首页 > 科技观察

Java 数组优秀指南,快收藏让它吃灰

时间:2023-03-14 00:12:53 科技观察

优秀的Java数组攻略,赶紧收藏起来,让它吃灰吧好幼稚,好可笑。因为只看到了表面现象,实际上List的内部还是由数组实现的,比如ArrayList,在它的源码中可以看到如下内容:DEFAULTCAPACITY_EMPTY_ELEMENTDATA*将在添加第一个元素时扩展为DEFAULT_CAPACITY。*/transientObject[]elementData;//非私有化以简化嵌套类访问/***ArrayList的大小(其包含的元素数)。**@serial*/privateintsize;01.什么是数组根据Javadoc给出的解释,数组是一个对象,包含了一组固定数量的元素,这些元素的类型都是相同的。数组会根据索引把元素放在指定的位置,也就是说我们可以通过索引来访问这些元素。在Java中,索引从0开始。我们可以将数组理解为排列整齐的单元格,每个单元格存储一个元素。数组元素的类型可以是基本数据类型(如int、double),也可以是引用数据类型(如String),包括自定义类型的对象。了解了数组的定义之后,让我们深入了解一下它的用法。在Java中,可以通过两种方式声明数组。我们先看第一种:int[]anArray;再看第二种类型:intanOtherArray[];区别在于方括号的位置,是跟在类型后面,还是放在变量名之后。前者比后者使用频率更高。接下来,是时候看看如何初始化数组了。初始化数组的方法也有很多种。比如最常见的是:int[]anArray=newint[10];使用了new关键字,对吗?这意味着数组确实是一个对象。然后,数组的长度在方括号中指定,这是必需的。此时数组中的每个元素都会被初始化为默认值,int类型为0,Object类型为null。另外,也可以使用大括号直接初始化数组中的元素:intanOtherArray[]=newint[]{1,2,3,4,5};此时数组的元素为1、2、3、4、5,索引依次为0、1、2、3、4。02.访问数组前面说过,可以通过索引访问数组的元素,如下:anArray[0]=10;System.out.println(anArray[0]);可以通过数组的变量名访问数组,加上方括号,加上元素的索引,通过“=”运算符赋值。如果索引的值超出数组的边界,将抛出ArrayIndexOutOfBoundException。关于这方面的知识,我之前写过一篇文章。感兴趣的可以跳过去看看。为什么会出现ArrayIndexOutOfBoundsException我觉得原因挺有意思的。由于数组的索引从0开始,因此它在数组的长度-1处结束。不要使用超出这个范围的索引访问数组,不会抛出数组越界的异常。03.遍历数组当数组中的元素很多时,很难一个一个地访问数组,所以需要遍历数组。第一个,使用for循环:intanOtherArray[]=newint[]{1,2,3,4,5};for(inti=0;iaList=newArrayList<>();for(intelement:anArray){aList.add(element);}更优雅的方法是通过Arrays类的asList()方法:ListaList=Arrays.asList(anArray);但需要注意的是,该方法返回的ArrayList并不是java.util.ArrayList,它实际上是一个Internal类:privatestaticclassArrayListextendsAbstractListimplementsRandomAccess,java.io.Serializable{}如果需要添加元素或删除元素,最好将其转换为java.util.ArrayList。newArrayList<>(Arrays.asList(anArray));06.将数组转换为StreamJava8增加了Stream流的概念,这意味着我们也可以将数组转换为Stream而不是List。String[]anArray=newString[]{"沉默之王二","一个有趣的程序员","多多关照他"};StreamaStream=Arrays.stream(anArray);也可以直接访问数组元素,通过指定索引进行裁剪:StreamanotherStream=Arrays.stream(anArray,1,3);结果包含“一个有趣的程序员”和“好好珍惜他”,1的索引位置包括,3这个索引位置不包括。07.数组排序Arrays类提供了sort()方法对数组进行排序。基本数据类型按升序排序实现Comparable接口的对象按compareTo()排序我们来看第一个例子:int[]anArray=newint[]{5,2,1,4,8};数组。排序(数组);排序结果如下:[1,2,4,5,8]看第二个例子:String[]yetAnotherArray=newString[]{"A","E","Z","B","C"};Arrays.sort(yetAnotherArray,1,3,Comparator.comparing(String::toString).reversed());只有1-3位置的元素被颠倒了,所以结果如下显示:[A,Z,E,B,C]08.数组搜索有时候,我们需要从数组中找到一个特定的元素。更直接的方式是通过遍历:int[]anArray=newint[]{5,2,1,4,8};for(inti=0;i