数组:引用数据类型,引用类型的数据都存放在堆中(String是引用类型)
数组特点:
1)数据存放在堆中,同一个数组内的元素在一块连续的内存当中(可以通过下标对数组进行定位检索,所以查询效率很高)
2)数组大小是固定的
3)数组创建后会拥有默认值
数组的内存模型:
1)数组是存储多个相同类型变量的对象,数组的所有元素都保存在堆内存中
2)创建一个数组就是在堆中创建一个数组对象
3)数组创建后立即拥有默认值
4)索引从0开始
5)连续分配
数组分类:
1)按照维度:
1-1)一维数组:
1-2)多维数组:
2)按照数据类型:
1-1)基本数据类型的数组:
2-2)引用数组类型的数组:
编写一个数组的步骤:
1)声明:
2)实例化:
3)赋值:
4)取值:
一维数组:
声明:
数据类型[] 数组名;
实例化:
new 数据类型[长度];
new是内存分配操作符,所谓创建数组,就是在内存中弄个给数组分配空间
赋值:
1)默认初始值:(动态初始化)
整数型:0
浮点型:0.0
字符型:\u0000
布尔型:false
引用类型:null
2)显式初始化:
for循环:
单个赋值:int temp=12;arr[0]=temp;
静态初始化:
int[]arr={23,45,78};int[]arr=new int[]{23,4,578};
取值:
单个取值:temp=arr[0];
for循环:
foreach循环: 只能遍历集合,是只读的
for(元素的数据类型 变量名: 集合名){循环体}
应用:
排序:
1)Arrays:Arrays.sort(数组名);只能对一维数组升序
2)冒泡排序:相邻的两个元素进行比较
3)选择排序:在一组数中找最大或者最小值,找到后与第一个元素交换位置
多维数组:数组的数组
声明:
数据类型[][] 数组名;
实例化:
new 数据类型[行数][列数];
锯齿数组:
声明
数据类型[][] 数组名;
实例化
new 数据类型[行数][];
数组的属性:
1)length:
数组的长度,是只读的
引用类型的原理:
声明一个数组只是在栈中分配内存,用来存放数组名和数组中元素的地址,并不实际存储元素的值,声明只是在栈中存放了数组的名字,而数组的值(地址)是null,当数组被实例化之后,在堆中给该数组分配一个内存空间来存放数组元素的数据(产生一个地址),这时候将堆中的数组的首地址赋值给栈中的数组的值,这时,栈中存放的是数组的名字和该数组在堆中的内存地址(所以是引用类型),数组中元素的值是存放在堆中的;(引用类型都是)