第四章 数组
1.什么是数组?
数组是一种引用类型,可以用来保存多个相同类型元素的集合
数组的特点:
在Java中,数组是一块连续的内存空间,所以在访问数组元素时可以使用下标访问。数组一旦创建,长度就是固定的,不能改变了。
1.1定义数组
语法:
数据类型[ ] 数组名;//推荐使用这种方式
数据类型 数组名[ ]; //不推荐使用,只是为了兼容C/C++程序员的习惯.
数组定义实际就是一个变量的定义,也需要对数组进行初始化操作。
1.2初始化
数组的初始化通常有两个过程:
1)为数组分配内存,指定数组长度(元素的个数);
JVM根据元素的数据类型和长度决定分配多大的内存
例如:int型数组,要保存5个元素(int占四个字节)–>分配4字节*5=20个字节的内存
2)初始化数组中的每一个元素
数组初始化的三种方式:
1)数组名 = new 数据类型[长度];
a)在JVM的堆内存中,开辟出指定长度的连续的一块内存空间
b) 为数组中的每一个元素设置成类0的值
byte,short,int,long,float,double 直接初始化成0;
char 初始化成空字符;
boolean初始化成false;
引用类型 初始化成null;(String是引用类型)
实例:
2)数组名 = new 数据类型[ ]{元素1,元素2,元素3,…元素n}
a)在JVM的堆内存中,开辟出{ }中元素数量的连续的一块内存空间
b) 将{ }中的元素依次放到数组的每一个元素中
3)数组类型 [ ] 数组名={元素1,元素2,元素3,…元素n}
过程与2)一样
1)2)可以在数组定义时使用,也可以在数组定义之后使用
3)只能在 定义数组时使用
具体例子:
第一行这个可以拆开写,第二行这个不能拆开写,拆开写会报错:
1.3 引用类型与基本类型处理过程的不同
基本数据类型只涉及到栈:
引用数据类型不仅涉及到栈,还涉及到堆(new—>跑到堆里面去了,在堆里面开
辟连续的内存空间 )。引用数据类型的变量,栈里面存的是对于元素的起始地址,
堆里面存的才是具体的元素内存(对象)。
2.数组的操作
2.1 访问数组元素
数组名【下标】
下标:元素在数组中的位置
取值:从0开始~数组的长度-1
(0对应第一个元素,1代表第二个元素…)
如何判断数组的长度:数组名.length 获取数组的长度(数组一旦创建就不能改变数组的大小长度了)
如果下标超出了取值范围,这时会报错:数组下标越界,如图所示:
若引用型变量,比如数组中赋值其中某个元素为空,则不能用下标进行访问,否则会出错:
2.2 数组的遍历
遍历:把集合中的每一个元素依次取出
1)使用循环迭代生成数组的下标,用下标迭代访问
2)使用增强for循环(也叫foreach)
语法:
for(变量:集合){
循环体
}
运行过程:
a) 从集合中取出一个元素,放在变量中(变量的值就是对应的遍历的元素值,相当于给变量每次赋值。)
b) 如果能取出,进入循环体执行,循环体执行完成后,回到a)
c)如果取不出,结束循环。
基于遍历可以对数组进行:
1)求和,求平均值
2)求最大最小值
3)查找数组中的元素
代码例子:求最大值:
代码例子:查找指定元素:
2.3 二分法查找算法:
2.4 排序算法
十大经典排序算法:
1)冒泡排序
2)插入排序
3)选择排序
4)快速排序
前四个要求懂思想,会编码,很重要!!剩下的要知道名字最起码,尽量记住思想
5)堆排序
6)归并排序
7)希尔排序
8)计数排序
9)桶排序
10)基数排序