数组的概念
数组一种数据类型-》引用类型
作用
之前学习的数据类型都只能装一个值,数组可以装多个值。
一维数组定义引用
语法1:数组元素的类型 [] 变量名;(java方式-推荐)
语法2:数组元素的类型 变量名 [] ;(c 保留)
创建数组对象--定义引用并静态初始化:知道数组的长度和内容。
语法: 数组元素的类型 [] 变量名=new 数组元素的类型 []{元素1,元素2...};
创建数组对象--定义引用并动态初始化:知道数组的长度。
语法: 数组元素的类型 [] 变量名=new 数组元素的类型 [长度];
注意:动态初始化后,数组元素都有默认值,规则与属性一致。
一维数组的访问及遍历
1)数组的长度:数组引用.length;
2) a)访问数组位置的值:
数组元素类型 变量= 数组引用[下标];
b)设置数组位置的值:
数组引用[下标]=新的元素的值;
3)遍历:把数组所有的元素找出来
for(int 下标=0;下标<=len-1;下标++){
//当前元素
数组元素类型 变量=数组引用[下标];
}
数组的注意点
1)数组的元素绑定下标,下标范围0到len-1
2)访问数组元素的时候下标必须是(0到len-1)否则-》报错ArrayIndexOutboundsOfexception
3)数组的元素必须是统一类型(类型兼容)
a)基本类型 满足 小类型自动转大类型
b)引用类型 满足子类型自动转超类型
4)数组底层存储元素内存位置是连续的,访问元素效率高(读取和设置)
数组相关算法
冒泡排序逻辑
1)排序每一趟确定一个数的位置
2)一共需要n(数的的个数)-1趟
3)每一趟确定数的位置-》通过两个数(前面和后面的数)比较n-i(第几趟)次
4)两个数进行比较,升序-》把两个数中大的放后面-》降序-》小的放后面
二分法查找逻辑
1)升序排序
2)每次找元素找当前范围(开始和结束位置)的中间位置的值来与目标值进行比较
3)初始时候:开始位置0,结束位置是len-1
4)每次找-》中间位置的值来与目标值-》进行比较
a)中间值大:结束位置设置为中间值-1
b)中间值小:开始位置设置为中间值+1
c)相等:找到了,返回即可
二维数组的使用
理解:把二维数组想象为表格
二维数组的长度--》行的长度
二维数组的一维数组的长度--》列的长度
静态初始化-定义引用并创建对象
语法:
一维数组的元素 [][] 二维数组名=new 一维数组的元素 [][]{
{一维数组元素1,一维数组元素2...},//一维数组-第一行
{...},//一维数组-第二行
{...},//...
};
动态初始化
语法1:
一维数组的元素 [][] 二维数组名=new 一维数组的元素 [行长度][];
二维数组的元素--》初始化为null
语法2:
一维数组的元素 [][] 二维数组名=new 一维数组的元素 [行长度][列长度];
二维数组的元素--》初始化为一个列长度的一维数组。
二维数组的访问及遍历
1)二维数组的长度:二维数组引用.length;
2)二维数组的元素(一维数组):二维数组引用[二维数组下标];
3)二维数组的元素(一维数组)的长度:二维数组引用[二维数组下标].length;
4)二维数组的元素(一维数组)的元素:二维数组引用[二维数组下标][一维数组下标];
5)遍历
//遍历二维数组-元素(一维数组)
for(int 二维下标=0;二维下标<=len-1;二维下标++){
//当前元素-》一维数组
一维数组元素类型 []变量=二维数组引用[下标];
//遍历一维数组-元素(具体数据)
for(int 一维下标=0;一维下标<=len-1;一维下标++){
//当前元素-具体数据
一维数组元素类型 变量=一维数组引用[一维下标];
}
}