深入理解JAVA数组

上传人:夏** 文档编号:472371816 上传时间:2023-01-14 格式:DOC 页数:7 大小:216.51KB
返回 下载 相关 举报
深入理解JAVA数组_第1页
第1页 / 共7页
深入理解JAVA数组_第2页
第2页 / 共7页
深入理解JAVA数组_第3页
第3页 / 共7页
深入理解JAVA数组_第4页
第4页 / 共7页
深入理解JAVA数组_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《深入理解JAVA数组》由会员分享,可在线阅读,更多相关《深入理解JAVA数组(7页珍藏版)》请在金锄头文库上搜索。

1、为什么我们认为JAVA没有多维数组,因为从数组底层的运行机制上来看。前面的几篇文章里提到过,JAVA语言里的数组类型是引用类型,因此,数组变量其实是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用,如果数组元素的引用再次指向真实的数组内存,这时会发现很像多维数组。根据数组的语法定义:type arrName;, 这是典型的一维数组的定义语法,其中type是数组元素的类型。如果希望数组元素也是一个引用,而且是指向int数组的引用,那么可以把上面type具体看成int (我们知道:int就是一种类型,int类型的用法与普通类型并无任何区别),那么上面定义数组的语法就是int arr

2、Name. 扩大类型后:type arrName;JAVA语言采用上面的语法格式来定义二维数组,但它的实质还是一维数组,只是其数组元素也是引用,数组元素里保存的引用指向一维数组。之所以写上面那些概念,就是想先让大家明白一维数组与二维数组之间的区别。下面看代码吧,不想写概念了。public class TwoDimensionTest public static void main (String args) /定义一个二维数组 int a; /把a当成一维数组进行初始化,初始化a是一个长度为4的数组 /a数组的数组元素又是引用类型 a = new int4; /把a数组当成一维数组,遍历a数组

3、的每个数组元素 for (int i = 0 , len = a.length; i len ; i+ ) System.out.println(ai); /程序执行到这里时,将输出四个null,系统赋的默认值 /这时还是一维数组 /*程序走到这里时的编译结果:*/ /初始化a数组的第一个元素 a0 = new int2 /系统会为第一个数组元素赋两个0 ,二维数组就是数组的数组这样理解吧 /访问a数组的第一个元素所指数组的第二个元素 (可以理解为数组的数组) a01 = 6; /这时a数组的第一个元素所指数组的第一个元素为系统默认值0/*为了让大家更直接的理解和明白我就忽略下格式吧,把编译结

4、果,放上来,请大家谅解下。*/ /a数组的第一个元素是一个一维数组,遍历这个一维数组 for (int i = 0 , len = a0.length ; i len ; i + ) System.out.println(a0i); /这里还是要提醒大家,数组的下标是从0开始的 /*程序走到这里时的编译结果:*/ /同时动态初始化二维数组的2个维数 int b = new int34; /使用静态初始化的语法来初始化一个二维数组 String str1 = new String new String3,new Stringhello; /使用简化的静态初始化语法来初始化二维数组 String

5、str2 = new String3,new Stringhello; System.out.println(使用静态初始化定义的二维数组:+str110); System.out.println(使用简化初始给定义的二维数组:+str210); 整个程序的编译结果:下面详细说明下,程序代码的运行过程:这段代码(for (int i = 0; i a.length ; i+) System.out.println(ai); )上面代码把a 这个二维数组当成一维数组处理,只是每个数组元素都是null,所以我们看到输出结果都是null。程序int a;,将在栈内存中定义一个引用变量,这个变量并未指

6、向任何有效的内存空间,此时的堆内存中还未为这行代码分配任何存储区。程序对a数组执行初始化:a = new int3; , 这行代码为让a变量指向一块长度为3的数组内存,这个长度为3数组里每个数组元素都是引用类型(数组类型),系统为这些数组元素分配默认初始值-null,内存图如下:因为a数组的元素必须是int数组,所以接下来的程序对a0元素执行初始化,使右边堆内存中第一个数组元素指向一个有效的数组内存,指向一个长度为2的int 数组。 因为程序采用动态初始化a0数组,因此系统将为a0的每个数组元素分配默认初始值:0,然后程序再显式为a0数组的第二个元素赋值为6,内存图如下:灰色覆盖的数组元素就是

7、程序显式指定的数组元素值。然后接着迭代输出a0数组的每个数组元素,将会输出0(这个因为程序员没有显式指定值,所以是系统默认的值)和6。我们知道,初始化多维数组时,可以只指定最左边维的大小;当然,也可以一次指定每一维的大小。/int b = new int34;这时定义了一个b数组变量,这个数组变量指向一个长度为3的数组,这个数组的每个数组元素又是一个数组类型,它们各指向对应的长度为4的int数组,每个数组元素的值为0。内存图如下:还可以使用静态初始化的方式来初始化二维数组,使用静态初始化来初始化二维数组时,二维数组的每个数组元素都是一维数组,因此必须指定多个一维数组作为二维数组的初始化值/使用

8、静态初始化的语法来初始化一个二维数组String str1 = new String new String3,new Stringhello;内存图如下:最近总结为:二维数组是一维数组,其数组元素是一维数组;三维数组也是一维数组,其数组元素是二维数组;四维数组还是一维数组,其数组元素是三维数组数组应用在开发中的方方面面,我们开发时,记得要多查JDK文档 ,因为这是人类智慧的成果,里面包括了众多已经写好了的类。我们只管拿来主义就行。在写JDK工具类的应用之前,我相写下,普通二维数组的遍历方法,因为怕有些读者还没有理解,那就辛苦我一下了,只希望大家在读完这篇文章后,能给个好评,就满足了。我的文章都

9、会结合代码和编译结果来说,这样一来可以看到代码是怎么写出来的,二来可以看到结果,必竟有个结果总比看不到结果强。看代码吧:public class Test /记住了,遍历二维数组会用到双层for循环 public static void main(String args) /定义一个a数组,使用静态初始化 int a = new int 3,4,5,6,7,8,9,3,2,3,5,7; /行表示有几个大括号,列表示每个大括号里的内容 for(int i = 0; i a.length; i+) /获取行数功能 System.out.println(); /实现程序换行的功能 for(int j

10、 = 0; j ai.length; j+) /实现对每一行数组元素的依次输出 System.out.print(aij+ ); 编译结果:最后结合JDK,说下操作数组的工具类有哪些。JDK和JAVA提供的Arrays类里包含了一些static修饰方法可以直接操作数组,这个Arrays类里包含了如下几个static修饰的方法(static 修饰的方法可以直接通过类名来调用):看Arrays类的应用代码:这里Arrays类是人家已经写好的,是JAVA里的类库,所以我们用的时候一定要导入包名:import java.util.Arrays;public class ArraysTest /调用的方

11、法:比较,复制,输出字符串,升序排序 public static void main(String args) /定义一个a数组,使用静态初始化 int a = new int3, 4 , 5, 6; / int a = new int4; 使用动态初始化也能比较 /但是用二维数组是无法比较的 /定义一个a2数组 int a2 = new int3,4,5,6; /int a2 = new int4; 使用动态初始化也能比较 /a数组和a2数组的长度相等,每个元素依次相等,将输出true System.out.println(a数组和a2数组是否相等: + Arrays.equas(a , a

12、2);/* 在JDK文档里的解释可给大家看下:* public static boolean equals(int a, int a2)* 如果两个数组以相同顺序包含相同的元素,则两个数组是相等的*/通过复制a数组,生成一个新的b数组 int b = Arrays.copyOf(a, 6); /调用Arrays类里的copyOf 方法。 System.out.println(看看复制的数组,a数组和b数组是否相等: + Arrays.equals(a, b );/*/ /输出b数组的元素,将输出3, 4, 5, 6, 0, 0 System.out.println(b数组的元素为: + Arr

13、ays.toString(b); /输出a数组 System.out.println(a数组的元素为:+ Arrays.toString(a); /输出a2数组,也可以用for循环来依次输出结果 System.out.println(a2数组的元素为:+ Arrays.toString(a2); /将b数组的第3个元素(包括)到第5个元素(不包括)赋为1 Arrays.fill(b, 2, 4, 1); / 记住2和4指的是数组的索引值,是数组的下标是从0开始的 /输出b数组的元素,将输出3, 4, 1, 1, 0, 0 System.out.println(重新赋值后,b数组的元素为: + Arrays.toString(b);/*/再说明下,我这里放上程序的编译结果是为了大家更直观的理解内容,是忽略了一些格式的,所以大家在以后的开发中,一定要注意好格式。*/对b数组进行排序,这里用到的是升级排序法,可以查看JDK开发帮助文档。Arrays.sort

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 汽车技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号