当前位置:   article > 正文

Java基础语法——数组_java数组语法

java数组语法

每日正能量

世上还有很多美好的事物等着你,别抱怨更不要放弃,所以你要内心温柔,安静努力。

1. 首先我们引入几个问题: 

1.1 什么是数组?

        数组就是具有相同数据类型且按一定次序排列的一组变量的集合体。即用一个变量名表示一组数据。

1.2 什么是数组元素?

        构成一个数组的每一个数据称为数组元素。

1.3 什么是数组下标

        各元素通过下标来区分。下标表明了数组元素在数组中的位置。在一个数组中,数组下标是用整数表示的,从0开始,依次累加1。

1.4 什么是数组大小?

        数组中元素的个数叫做数组的大小,也叫数组的长度。

2. 那么如何使用数组?

使用数组需要经过4个步骤

        1.声明数组

        2.为数组元素分配内存

        3.为数组元素初始化

        4.访问数组元素

3. 数组声明

声明一个数组的语法如下:

        数据类型 数组名[]; //int arr[]

        或

        数据类型[] 数组名;//强制使用这种

        例如:

        int score[];

        或

        int[] score;

        说明:

                1.数组是什么数据类型,数组的元素就是什么数据类型

                2.数组的特征是[ ]

                3数组是引用类型

4. 为数组元素分配内存空间

        声明一个数组时仅为数组指定了数组名称和元素的类型,并未指定数组元素的个数,系统无法为数组分配存储空间。要让系统为数组元素分配存储空间,必须指出数组元素的个数。通过new运算符可以为数组元素分配内存空间。

为数组元素分配空间的语法格式:

数组名 = new 数据类型[数组长度];

例如:

score= new int[5];

定义数组和为数组元素分配内存,这两步可以合并在一起写,例如

int []score = new int[5];

5. 为数组元素初始化

        数组声明并为数组元素分配空间完成后,必须为数组元素初始化后,才能使用数组元素。如果没有为数组元素初始化,数组元素是默认值。byte、short、int、long类型的数组元素的默认值是0,float、double类型数组的元素默认值是0.0,boolean类型数组元素的默认值是false,char类型的数组元素默认值是’\u0000’,引用类型数组元素的默认值是null。一般来说一次只能对数组中的一个元素进行赋值,可以通过数组下标确定某一个数组元素。例如:

score[0] = 68;

score[1] = 78;

如果数据元素个数比较多,可以通过for循环为数组元素初始化。把for循环的循环变量当作数组的下标来使用即可。

  1. public static void main(String[] args) {
  2. int[] score;
  3. score =new int[4];
  4. for (int i = 0; i < score.length; i++) {
  5. score[i] = i;
  6. }
  7. }

定义数组、为数组元素分配内存、数组元素初始化,这三步可以合并在一起写,例如

int []score = new int[]{12,56,34,78};

int []score = {12,56,34,78};

6. 访问数组元素

访问数组元素是通过数组名+下标实现的。例如:

int[] nums = {12,25,55,77};
int n = nums[2];
System.out.println(n);

int n = nums[2]表示访问下标为2的数组元素,并将其值赋值给变量n。

7. Java对数组的内存分配

        数组名称和数组元素都是变量,它们都分配在内存中。Java将内存分成了多个存储变量的区域,其中包含堆和栈。堆和栈中包含若干个存储单元,变量的数据就是存储在这些存储单元中的,每一个存储单元都有内存地址编号,这些编号是由操作系统分配的。

Java将数组名称存储在栈中,数组元素分配在堆中。如下面的代码运行后内存的分配情况如下图:

  1. public static void main(String[] args) {
  2.    int[] score;
  3.    score =new int[5];
  4.    for (int i = 0; i < score.length; i++) {
  5.        score[i] = i;
  6.   }
  7. }

说明:

        1.首先在执行int[] score;代码时,java会在栈中寻找一个空闲的内存单元(地址编号为

0xFF02的内存单元),并将该单元分配给数组名称score。

        2.然后在执行new int[5]时,表示为数组的5个元素分配内存,java会在堆中分配能够连续存储5个int类型数据的内存空间(地址编号从0xAA01到0xAA05)。

        3.接下来执行score =new int[5]的赋值操作。赋值操作会将已分配的5个内存空间的首地址(0xAA01)赋值给数组名score。也就是内存地址编号为0xFF02中存储的是0xAA01内存地址编号。即score变量指向到0xAA01地址。

        4.score[i] = i;是将i的值存储到数据元素score[i]中。

 

图 数组内存分配  

1. Java将数据类型分为两大类,一类是基本数据类型,一类是引用数据类型。它们的区别是基本数据类型的变量中存储的是真实的数据,而引用类型的变量中存储的是内存地址编号。如上例中数组名score就是引用类型,其值0xFF01是内存地址编号。score[0]是基本数据型,其值是真实数据0。

2. 引用类型的变量其实就是c语言中的指针。在c语言中指针就是一个变量,只不过该变量储的不是真实数据,而是内存地址编号。

8. 数组这种数据结构的优点和缺点是什么?

优点:查询/查找/检索某个下标上的元素时效率极高。 原因:

        第一:每一个元素的内存地址在空间存储上是连续的。

        ​第二:每一个元素类型相同,所以占用空间大小一样。

        int [] arr = new int[5];

                 栈                 堆

        第三:知道第一个元素内存地址,知道每一个元素占用空间的大小,又知道下标, 所以通过一个数学表达式就可以计算出某个下标上元素的内存地址。直接通过内存 地址定位元素,所以数组的检索效率是最高的。

注意: ​ 数组中存储100个元素,或者存储100万个元素,在元素查询/检索方面,效率是相同的, ​ 因为数组中元素查找的时候不会一个一个找,是通过数学表达式计算出来的。(算出一个内存地址,直接定位的。)

缺点:

         第一:由于为了保证数组中每个元素的内存地址连续,所以在数组上随机删除或者增加元素的时候,效率较低,因为随机增删元素会涉及到后面元素统一向前或者向后位移的操作。

        第二:数组不能存储大数据量。 因为很难在内存空间上找到一块特别大的连续的内存空间。 注意: 对于数组中最后一个元素的增删,是没有效率影响的。

 

9. 多维数组

9.1 什么是二维数组?

        二维数组其实是一个 特殊的一维数组,特殊在这个一维数组当中的每一个元素是一个一维数组。

9.2 三维数组是什么?

        三维数组是一个特殊的二维数组,特殊在这个二维数组 中每一个元素是一个一维数组。实际的开发中使用最多的就是一维数组。二维数组也很少使用。三维数组几乎不用。

9.3 二维数组静态初始化

  1. int[][] array = {
  2.       {1,1,1},
  3.       {2,3,4,5},
  4.       {0,0,0,0},
  5.       {2,3,4,5},
  6.       {2,3,4,5},
  7.       {2,3,4,5},
  8.       {2,3,4,5}
  9. };

 

9.4 二维数组动态初始化

例如:

int[][] array = new int[3][4];

9.5 关于二维数组中元素的:读和改。

a[二维数组中的一维数组的下标][一维数组的下标]

a[0][0]:表示第1个一维数组中的第1个元素。

a[3][100]:表示第4个一维数组中的第101个元素。

注意: 对于a[3][100]来说,其中 a[3] 是一个整体。[100]是前面a[3]执行结束的结果然后再下标100。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/581796
推荐阅读
相关标签
  

闽ICP备14008679号