当前位置:首页 > > 充电吧
[导读]十、Java中的数组1.数组的定义在C语言中,我们定义数组的方式如下:数据类型 数组名[数组元素的个数];例如:int a[ 3 ];int b[ ];//这种定义由于没有指定数组元素个数,在C语言中

十、Java中的数组

1.数组的定义

在C语言中,我们定义数组的方式如下:

数据类型 数组名[数组元素的个数];

例如:

int a[ 3 ];

int b[ ];//这种定义由于没有指定数组元素个数,在C语言中是不允许的。而且我们知道,当一个数组定义好后,它的空间大小也就固定了,一般在栈上开辟空间。那在Java中,如何定义数组呢?

(1)数据类型[] 数组名;

例如:

int[] a;

(2)数据类型 数组名[];

例如:

int a[];

以上两种方法在 java中都可以用来定义数组,我们建议大家使用第一种。

注意:

(1)在java中定义数组时,不能指定数组长度。" int[3] a"这种写法是错误的。

(2)数组的大小,需要在静态初始化 或 用"new"关键字在堆区申请内存。

(3)在C语言中,数组名是一个地址常量不能修改,在Java中,数组名是一个引用类型变量,可以修改的。

个人认为,Java中的引用类型变量实际上类似于C语言的指针变量,不过这个指针变量只用来保存数组空间的首地址,所以在Java中,他是用数组类型定义的。

2.数组初始化与空间开辟

(1)静态初始化

数据类型[ ] 引用类型变量名 = {数据1,数据2,数据3,....};

例如:

int[] a = {1,2,3,4,5};

这种写法和C语言类似,不同的是在C语言中,此时数组的空间一般是在栈中开辟,而在Java中,数组的空间一定是在堆区分配。

(2)动态初始化

数据类型[ ] 引用类型变量名;引用类型变量名 = new 数据类型[数组元素个数]; //此时数组中的每个成员值默认为0。或引用类型变量名 = new 数据类型[ ]{数据1,数据2,数据3....}; //此时数组中的每个成员值为指定的数据。

例如:

int[] a;

a = new int[3];

或a = new int[ ] {1,2,3};

这种写法是错误的,需要注意:

a = new int[3]{1,2,3};

注意:这里的"new"类似于C语言中的"malloc",不同的是在C语言中我们手动申请的内存,需要自己手动释放。在Java中我们申请的内存由Java内部的回收机制自动释放。一般在这一块内存没有人引用的时候,释放。

(3)理解java 中的数组名与数组的关系


总结:数组引用变量(数组名)是存放在栈内存(stack)中,数组元素是存放在堆内存(heap)中。

3.数组元素个数与数组元素访问

在C语言中,数组元素个数可以通过 sizeof(数组名) / 数组元素大小得到。在Java中是没有sizeof这个关键字的,在Java中数组元素个数的获得可以使用数组的属性成员"length"获取。

例如:

可以看出在Java中访问数组元素与C语言中并无区别,但是在Java中,有一种更简单的方法(For each循环,也叫增强型for循环)遍历数组。

注意:

Java SE 5.0增加了一种功能很强的循环结构,可以用来依次处理数组中的每个元素(其他类型的元素集合亦可)而不必为指定数组下标值而分心。

这种增强的for循环格式如下:

for(数据类型 变量名 : 集合){

java语句。

}

集合必须是一个数组或一个实现了Iterable接口的类对象。有关Iterable接口的内容我们在后面再讨论。

例如:

4. 数组间的拷贝

我们先来看一个例子:

虽然看似digits的数组长度看似由4变成3,其实只是numbers和digits指向同一个数组而已,而digits本身失去引用而变成垃圾,等待垃圾回收来回收(但其长度仍然为4),但其内部运行机制如下图所示。

可以看出,上面的代码并没有真正意义上做到数组的拷贝。那如何实现数组的拷贝呢,我们有两种方法:

第一种:自己写代码将A数组中的每个成员挨个赋值给B数组。

第二种:调用java中提供的函数完成拷贝





4. 数组的排序

(1)自己用排序算法实现

(2)调用Java实现好的排序算法

十一、Java中的二维数组

Java中的二维数组可以看成是数组的数组,说白了就是二维数组中存放的是多个一维数组,二维数组中的每个元素都是一维数组的数组名。

1.二维数组的定义方式1

type[][] array(推荐) 或 type array[][] 或 type[] array[];

例如:

int array[][];

array = new int[3][4];//这个二维数组中有三个一维数组,每个一维数组有4个成员

array[0][1] //第0个数组中的第1个元素

array[1][2] //第1个数组中的第2个元素

array[2][2] //第2个数组中的第2个元素

注意:

array[0],array[1],array[2]是三个一维数组的数组名。

2.二维数组定义方式2

type[ ][ ] array(推荐) 或 type array[ ][ ] 或 type[ ] array[ ];

例如:

int array[ ][ ];

array = new int[3][ ];

请注意和c语言的不同,在c语言中,二维数组的行可以省略,但是列绝对是不能省略的,之所以这样规定是因为在c语言中,二维数组的

每一行元素个数必须是相等的。

在Java中,二维数组的行不能被省略,但是列可以省略,在Java中,二维数组的每一行数组元素的个数可以不相等,即每行是可变的。




3.二维数组的定义方式3

type[][] array = {{数据1,数据2,...},{数据1,数据2,...},{数据1,数据2,...} ...};


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭