赞
踩
每日正能量
世上还有很多美好的事物等着你,别抱怨更不要放弃,所以你要内心温柔,安静努力。
1. 首先我们引入几个问题:
1.1 什么是数组?
1.2 什么是数组元素?
1.3 什么是数组下标
1.4 什么是数组大小?
2. 那么如何使用数组?
3. 数组声明
数据类型 数组名[]; //int arr[]
或
数据类型[] 数组名;//强制使用这种
例如:
int score[];
或
int[] score;
说明:
1.数组是什么数据类型,数组的元素就是什么数据类型
2.数组的特征是[ ]
3数组是引用类型
4. 为数组元素分配内存空间
为数组元素分配空间的语法格式:
数组名 = new 数据类型[数组长度];
例如:
score= new int[5];
定义数组和为数组元素分配内存,这两步可以合并在一起写,例如
int []score = new int[5];
5. 为数组元素初始化
- public static void main(String[] args) {
- int[] score;
- score =new int[4];
- for (int i = 0; i < score.length; i++) {
- score[i] = i;
- }
- }
定义数组、为数组元素分配内存、数组元素初始化,这三步可以合并在一起写,例如
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。
数组名称和数组元素都是变量,它们都分配在内存中。Java将内存分成了多个存储变量的区域,其中包含堆和栈。堆和栈中包含若干个存储单元,变量的数据就是存储在这些存储单元中的,每一个存储单元都有内存地址编号,这些编号是由操作系统分配的。
Java将数组名称存储在栈中,数组元素分配在堆中。如下面的代码运行后内存的分配情况如下图:
- public static void main(String[] args) {
- int[] score;
- score =new int[5];
- for (int i = 0; i < score.length; i++) {
- score[i] = i;
- }
- }
说明:
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语言中指针就是一个变量,只不过该变量储的不是真实数据,而是内存地址编号。
优点:查询/查找/检索某个下标上的元素时效率极高。 原因:
第一:每一个元素的内存地址在空间存储上是连续的。
第二:每一个元素类型相同,所以占用空间大小一样。
int [] arr = new int[5];
栈 堆
第三:知道第一个元素内存地址,知道每一个元素占用空间的大小,又知道下标, 所以通过一个数学表达式就可以计算出某个下标上元素的内存地址。直接通过内存 地址定位元素,所以数组的检索效率是最高的。
注意: 数组中存储100个元素,或者存储100万个元素,在元素查询/检索方面,效率是相同的, 因为数组中元素查找的时候不会一个一个找,是通过数学表达式计算出来的。(算出一个内存地址,直接定位的。)
缺点:
第一:由于为了保证数组中每个元素的内存地址连续,所以在数组上随机删除或者增加元素的时候,效率较低,因为随机增删元素会涉及到后面元素统一向前或者向后位移的操作。
第二:数组不能存储大数据量。 因为很难在内存空间上找到一块特别大的连续的内存空间。 注意: 对于数组中最后一个元素的增删,是没有效率影响的。
9. 多维数组
9.1 什么是二维数组?
二维数组其实是一个 特殊的一维数组,特殊在这个一维数组当中的每一个元素是一个一维数组。
9.2 三维数组是什么?
9.3 二维数组静态初始化
- int[][] array = {
- {1,1,1},
- {2,3,4,5},
- {0,0,0,0},
- {2,3,4,5},
- {2,3,4,5},
- {2,3,4,5},
- {2,3,4,5}
- };
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。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。