目录
1.什么是数组?
(1)Java中数组是一种用于存储多个相同数据类型元素的容器
(2)例如存放int元素的数组 int[] nums = {8,2,3,5,3,5,6};
(3)例如存放String元素的数组 String[] names = {"jack","jay","zhangsan"};
(4)数组是一个对象,存储在堆内存中
2.数组的分类
(1)根据存放元素的类型分类:基本类型数组, 引用类型数组
(2)根据维数进行分类:一维数组, 二维数组, 三维数组, 多维数组...
(3)根据数组初始化方式的不同进行分类:静态数组, 动态数组
静态数组:通过静态初始化的数组,语法格式有两种:
第一种:数据类型[] 变量名 = new 数据类型[]{元素1, 元素2, 元素3....};
int[] arr = new in[]{3,2,6,4,8};
第二种:数据类型[] 变量名 = {元素1, 元素2, 元素3....};
int[] arr = {3,2,6,4,8};
动态数组:通过动态初始化的数组,语法格式如下:
数据类型[] 变量名 = new 数据类型[长度];
int[] arr = new int[6];
3.Java数组存储元素的特点?
(1)数组的长度一旦确定是固定不变的
(2)数组中每个元素的数据类型是相同的,也意味着所占空间大小是相同的
(3)数组中存储元素的空间的内存地址是连续的
(4)每个数组对象都有length属性,可以通过length知道当前数组的长度,元素个数
(5)每个元素都有索引(也叫下标),首元素索引是0,以1往后递增,末尾元素索引是length - 1;
(6)数组变量存储着数组对象在堆内存中的内存地址,数组对象的内存地址是首元素的内存地址
4.数组的优点和缺点?
(1)数组优点:查找效率极高,无论数组中100个元素还是100万个元素,查找效率是一样的,时间复杂度O(1),也就是说无论数组的长度是多少,根据索引查找数组当中的任一元素,所耗费的时间是一样的,原因是什么?
因为在数组中,我们知道数组首元素的内存地址,而元素的内存地址是连续的,每个元素所占空间大小是相同的,只要知道下标,通过数学表达式计算出要找的元素的内存地址,直接通过内存地址去定位元素
(2)数组缺点:随机增删元素的效率极低,当一个元素被移出数组或者想添加到数组中,因为数组的长度是不变的,元素内存地址是连续的,所以就涉及到后续元素移动的问题,时间复杂度是O(n),O(n)表示的是线性阶,随着规模问题n的不断增大,时间复杂度是不断增大的,算法的执行效率降低,需要注意的是如果增删的是末尾元素,则对执行效率没有影响
还一个缺点是无法存储大数据,因为在内存中很难找到一块连续的非常大的内存