本篇我们来介绍下数据结构中的数组:
在程序设计语言中,数组是我们较为熟悉的一种数据类型。几乎所有的程序设计语言都把数组类型设定为固定的类型。
一、数组的逻辑结构和基本运算
数组可以看成是线性表的一种推广,一维数组又称为常量,
一维数组“:
官方解释:由一组具有相同类型的数据元素组成,并存储在一组连续的存储单元中的数组元素我们称之为数组。
二维数组:
若一维数组中的数据元素又是一维数组结构,我们称为二维数组。二维数组可以看成是n个列向量组成的线性表。
三维数组”:
以此类推,若一维数组中的元素又是二维数组结构,我们成为三维数组。
N维数组“:
一般,一个n维数组可以看成元素为n-1维数组的线性表。
说了那么多官方的解释,那么究竟什么是数组呢?
举个栗子:
这群小蝌蚪我们就可以称之为数组。
数组的基本运算:
通常,数组只有两种基本运算:
1)读:给定一组下标,返回该位置的元素内容。
二、数组的存储结构:
一维数组元素的内存单元地址是连续的,
二维数组有两种存储方法:
1)以列序为主序的存储。
2)以行序为主序的存储。
在C语言中,数组采用的是以行序为主的存储方法,其他某些语言中,数组采用以列序为主序的存储方式。
矩阵的压缩存储中的特殊矩阵和稀疏矩阵这里就不介绍了,感兴趣的可以自行研究。
下面才到我们这篇文章的重点:
三、JAVA中的数组
JAVA中的数组并不是很难的知识,但从语法上来说的话,只是很多程序员虽然一直都在使用数组,但往往对JAVA数组的内存分配把握的不够精确。相信通过本篇文章,以后我们在codeing的时候肯定会做到心中有数的。
1.数组的初始化
JAVA数组是静态的
JAVA是典型的静态语言,因此JAVA数组是静态的,即当数组被初始化之后,该数组所占的内存空间、数组长度都是不可变的。JAVA中的数组必须经过初始化之后才可以使用。
即创建实际的数组对象,在内存中为其分配内存空间,并为每个数组元素指定初始值。
数组初始化的两种方式:
1)静态初始化:初始化时由我们自己(程序员)显式指定每个数组元素的初始值,由系统决定数组的长度。
2)动态初始化:初始化时我们只指定数组的长度,由系统分配初始值。
不管使用哪种方式初始化数组,一旦初始化完成,该数组的长度都不可以改变。 JAVA中只允许我们通过数组的length来访问数组的长度。
小提示:不要同时使用静态初始化和动态初始化。说白了的意思就是,不要在为数组初始化时既指定了数组的长度又为数组赋了初始值。
前面说道动态初始化数组 会由系统来分配初始值。
以下为系统默认分配值:
1)数组元素是基本类型中的整型类型(byte、short、int、long、)数组元素初始值为0
数组元素是基本类型中的浮点类型(float、double、)数组元素的值为0.0
数组元素是基本类型中的字符类型(char、)数组元素的值为\u000
数组元素是基本类型中的布尔类型(boolean、)数组元素的值为false
2)数组元素是引用类型(类、接口和数组)时,数组元素初始值为NULL。
小提示:JAVA中的数组变量只是引用类型的变量,并不是数组对象本身,只有让数组变量指向有效的数组对象,程序中才可以使用数组变量。
数据变量和数组对象一定要区分清楚。(类似C语言中的指针。)
数组变量只是一个引用变量,而数组对象是保存在堆内存中的连续内存空间。对数组执行初始化并不是对数组变量执行初始化,而是在堆内存中创建数组对象——也就是为该数组对象分配一块连续的内存空间,这块连续的内存空间的长度就是数组的长度。
特别指出”:
JAVA中的数组在使用前必须初始化。JAVA的局部变量必须由程序员赋初始值,即使为NULL。