数组概述
- ava语言中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object。
- 数组实际上是个容器,可以同时容纳多个元素(数组是一个数据的集合)
- 数组当中可以存储基本数据类型的数据,也可以存储引用数据类型的数据。
- 数组是一种引用数据类型,所以数组是存储在堆当中的。
- 数组当中如果存储的是Java对象,实际上存储的是对象的“引用(内存地址)”
- 数组一旦创建,长度不可变。
- 所有的数组对象都有length属性,用来获取数组中元素个数。
- 数组要求数组中元素的类型要统一。比如int类型只能存储int类型。
- 数组在内存方面存储的时候,数组中元素内存地址是连续的。
- 数组中首元素内存地址作为整个数组对象内存地址。
- 数组中每个元素都有下标,下标从0开始,以1递增,最后一个元素的下标是length-1。
数组的优点和缺点
- 缺点: 第一:由于为了保证数组中每个元素的内存地址连续,所以在数组上随机删除或者增加元素的时候效率较低,因为随机增删元素会涉及到后面元素统一向前后者向后位移的操作。 第二:数组不能存储大数据量。
- 优点: 查询/查找/检索某个下标上的元素时效率极高。 为什么检索效率高? 第一:每个元素的内存地址在空间存储上是连续的。 第二:每个元素类型相同,所以占用空间大小一样。 第三:知道第一个元素内存地址,知道每一个元素占用空间大小,还知道下标,所以通过数学表达式就可以计算出某个下标元素的内存地址。直接通过内存地址定位元素,所以数组的检索效率极高。注意:对于数组中最后一个元素的增删,是没有效率影响
类型的默认值
数据类型默认值byte0short0int0long0Lfloat0.0Fdouble0.0char\u0000引用数据类型null
数组内存结构
定义一维数组
数据类型[ ] 数组名;
//语法格式int[] array1;//int类型 ,array1数组名
初始化一维数组
第一种方式:静态初始化
数据类型[ ] 数组名={元素1,元素2,…,元素n};
//语法格式int array1={1,2,3,4};//1,2,3,4表示数组元素
第二种方式:动态初始化
数据类型[ ] 数组名=new 数据类型[长度]
注意:前后的数据类型要统一
//语法格式int array1=newint[5];//初始化一个5个长度int类型数组,每个元素默认值0
- 使用new int [5]创建一个数组
- 把新建的数组的引用赋值给变量array1。
一维数组的遍历
数组遍历:就是将数组中的每个元素分别获取出来。
注意:如果i>array1.length,表示下标越界了 会报ArrayIndexOutOfBoundsException异常
for(int i=0;i<array1.length;i++){System.out.println(array1[i]);//i表示数组下标}
例子1
pubilc classTest01{publicstaticvoidmain(String[]args){// 声明一个int类型的数组,使用静态初始化的方式int[] array1={1,2,3,4};//也可以写成int array1[]={1,2,3,4}//所有的数组对象都有length属性System.out.println("数组中元素的个数"+array1.length);//通过下标对数组中的元素进行改和读//读System.out.println("第一元素:"+array1[0]);System.out.println("最后一个元素:"+array1[array1.length-1]);//改
array1[0]=111;//遍历数组for(int i=0;i<array1.length;i++){System.out.println(array1[i]);}}}
例子2
publicclassTest02{publicstaticvoidmain(String[]args){//声明一个int类型数组,使用动态初始化的方式int[] array2=newint[4];//创建长度为4的int类型数组,数组中每个元素的默认值是0//遍历数组for(int i=0;i<array2.length;i++){System.out.println("数组中下标为"+i+"的元素是:"+array2[i]);}}}
为什么动态初始化有默认值,而静态初始化没有
动态初始化:建立相应的空间,并附上默认值,再赋值时,是将默认值更改为新附的值。
静态初始化:建立空间同时赋值,赋多少值就开辟多少空间。
二维数组的定义
数据类型[ ] [ ] 数组名;
二维数组其实是一个特殊的一维数组,特殊在这个二维数组当中每一个元素是一个一维数组。
int[][] a;
二维数组初始化
第一种方式:静态初始化
数据类型[ ][ ] 数组名={{一维数组1},{一维数组2},…,{一维数组n}};
数据类型[二维数组中的一维数组的下标 ] [一维数组的下标 ] 数组名
int[][] a2={{1,1,1},{2,2,2,},{3,3,3,}};
例子3
publicclassTest03{publicstaticvoidmain(String[]args){//二维数组//以下代码当中,里面有3个一维数组int[][] a2={{1,2,3},{4,5,6},{7,8,9}};System.out.println("二维数组元素个数为:"+a2.length);//二维数组总共有3个元素System.out.println(a2[0].length);//a2[0].length表示a2中的第一个元素{1,2,3}的长度,长度为3/*
二维数组中元素:读和改
*/int b1= a2[0][0];表示取出第一个一维数组的第一个元素赋值给变量b1
int b2= a2[1][0];表示取出第二个一维数组的第一个元素赋值给变量b2
//改
a[0][0]=111;表示将第一个一维数组的第一个元素改为111//遍历二维数组for(int i=0;i<a2.length;i++){//负责取出二维数组中的一维数组//负责遍历一维数组for(int j=0;j<a2.length;j++){System.out.println(a2[i][j]);}}
第二种方式:动态初始化
数据类型[ ] [ ] 数组名=new int[行数][列数];
//3个一维数组,每一个一维数组当中有4个元素int[][] a2=newint[3][4];
版权归原作者 好学者加分 所有, 如有侵权,请联系我们删除。