数组
数组的特征:
1)数组是相同类型数据的有序集合
2)数组会在内存中开辟一块连续的空间,每个空间相当于之前的一个变量,称为数组的元素
3)数组中可以存储基本数据类型,可以存储引用数据类型,对于一个数组而言,数组的类型是固定的,只能是一个
4)元素的表示:数组名[下标或者索引] eg: array[0];
5)数组的索引是从0开始的
6)每个数组元素都有默认值, eg:int 0;double 0.0; boolean false;String null
7)数组的元素是有序的,指索引的顺序
8)数组的长度是固定的,一经定义,不能再发生变化,数组的长度:数组的标识符.length
数组的语法:
一)一维数组
1)声明数组变量:int [] scoreArr; //在栈中声明了一个数组变量,值不确定,还没有分配空间;也可以int scoreArr [] 来声明一个数组变量。不建议
2)分配空间:scoreArr=new int [10];//在堆内存中分配了10个连续的空间,每个元素时int类型,4个字节,元素默认值为0,并且把首地址赋值栈内存的scoreArr
3)合并声明和分配空间 int [] scoreArr=new int [10];
4)数组的静态初始化:声明,分配空间和赋值合并在一起,给出初始化值,由系统决定长度 int [] scoreArr=new int[]{19,29,34,22,33,12,52};
int [] scoreArr={19,29,34,22,33,12,52};
5)数组的动态初始化:分开写,单独赋值,只指定长度,由系统给出初始化值
int [] scoreArr=new int[10];
scoreArr[0]=39;
二)二维数组
1)等长二维数组:
定义:int [][] scoreArr = new int[2][3];定义了一个一维数组,长度为2,每个元素是一个一维数组,长度为3
数组元素赋值: scoreArr[0][0]=199; scoreArr[0][1]=20; scoreArr[0][2]=600;
scoreArr[1][0]=299; scoreArr[0][1]=78; scoreArr[0][2]=56;
2)不等长二维数组:
定义: int [][] scoreArr = new int[3][];
scoreArr[0] = new int[4];
scoreArr[1] = new int[3];
scoreArr[2] = new int[2];
赋值:int [] [] scoreArr=new int [] []{{100,90,80,50},{100,56,56},{29,45}};
int [] [] scoreArr={{100,90,80,50},{100,56,56},{29,45}};
数组的内存分配图:
栈内存:stack 存放数组名,存放局部变量,变量没有默认值,方法执行完毕立刻释放内存,是一种先进后出的结构
堆内存:heap存放数组元素的内容,每个元素都有默认值,方法执行完毕后不会立刻释放资源,由垃圾回收器负责回收,但回收取的时间不确定
等长二维数组内存分配图
数组的优缺点:
优点:一个数组可以存储多个元素
按照索引查询元素效率高
缺点:按照内容查找元素,效率低下
进行元素的添加和删除时,需要大量的移动元素
长度固定