数组是什么?
在java中数组是一个源自底层的数据结构(同时也为操作数组数据定义了一个java.util.Arrays类,但是这个类只是用于对数组元素进行操作);
在任何语言中数组都是一个最基本的数据结构,他是一个用于存储数据的连续的内存空间的集合,并且每个内存空间都有独一无二的编号.所以,这就相当于为数组里面的值进行了一一对应的编号.
数组保存数据的特性:
1 数组是一种引用数据类型
2 是一种连续的线性的数据结构
3 数组是一个容器,用来存储其他数据
4 数组可以存储任意类型的元素,但是每层的数据必须一样,必须是同一数据类型的数据
5 数组的长度不能直接改变,也就是说,数组一旦确定以后,里面元素的个数不能再增加或者减少(如果需要改变数组的大小,需要再单独的开辟一片内存空间,把当前的数组中的每个元素的映射关系,一一的复制到这个新的内存空间中,在这个过程中可以增减元素)
数组的声明
静态声明:在知道数组中每个元素的时候,我们用静态方式声明数组(直接划分内存空间,并且把元素直接就放进去)
数据类型[] 变量名 = {数组元素}
动态声明:就是预先不知道要保存什么值,但是我们需要先把保存至的内存空间划分好,然后用相应数据类型的默认值去占用空间
数据类型[] 变量名 = new 数据类型[长度];
数组的特性:
1 每个单独数组中的元素数据类型必须是统一的,数据类型的统一意味着每个数据的内存空间中的大小是一样的
2 数组是索引数据类型,那就意味着要占用两块内存空间;
在栈内存中,索引保存的是数组对象的第一个元素的内存地址,数组第一个元素的内存地址默认作为整个数组对象的内存地址.同时数组在声明的时候,会有一个length的默认元素类保存元素的个数
要查找某个元素的时候,只需要首元素的内存地址加上偏移量即可(通过首内存地址,加上偏移量,快速计算出要查找元素的内存地址,从而取得元素),由于通过内存直接查找,所以效率极高
3 数组对于数据处理:增,删,-------改,查
结合数组的特性,查找,更改,效率极高,但是增,删需要保证元素的有序,改元素位以后的数据位都需要向前或者向后移位操作,所以很慢(实际上没有移位,是直接开辟新的空间,然后把每个元素复制过去)
数组的遍历:
for(int i = 0;i< length-1;i++)
for(数据型 e: 数组的索引变量)
数组默认下标从0开始
数组的常见报错
java.lang.ArrayIndexOutOfBoundsException: 4
我们声明数组的时候(无论是动态还是静态)都自动按照正整数绑定了下标,如果在运算中超出了下标的范围就会报这个错误
找不到符号错误:就是指找不到某个数据类型
二维数组本质就是一个平面数据结构(就是表)
二维数组的特点:
1 二维数组是一个特殊的一维数组
2 特殊的一维数组,特殊在这个一维数组中每个元素都是"一维数组"