6.1数组(array)
1、数组的含义:
数组可以存放多个同一类型的数据,是一种引用数据类型(接口、数组、类),
遍历数组的时候,for循环中更倾向于初始值设置为0,因为数组的第一个值以0为索引;
优越的先死后活思路:遍历的时候,条件判断的右端写成hens.length;就不用每次都改了;
数组里使用循环主要是用来遍历数组的索引
2、数组的定义:
数据类型数组名[] = new 数据类型[大小];
左边是声明,右边是创建,可以分开的;声明以后是空值,创建以后才分配了空间;
或者右边可以{里面放具体值,适用于数组内元素数量有限的情况};
[]可以放在数据类型后面也可以放在数组名后面;
3、数组的引用或使用
数组名[下标、索引] a[2] a[3]
遍历数组的时候,for循环中更倾向于初始值设置为0,因为数组的一个值以0为索引;
4、数组中可以使用循环来做什么(循环中的i用来遍历数组的索引)
a. 遍历数组中的值并处理;
b. 输入数组中的值;
c. 输出数组中的值;
5、
6、数组本质是一个对象;
7、值传递(值拷贝)和引用传递(地址拷贝);概念7服务于更好地理解概念8;
8、因此数组实现值传递不能直接两个数组名直接相等赋值,需要声明创建一个新数组,遍历索引然后一个值一个值赋;
9、数组拷贝
10、数组翻转
第二个方法的高级之处在于新定义了一个变量j,简化编程思路
另一个高级操作是可以直接赋值数组名,相当于把地址赋过去;
11、数组扩容
数组不适合用来扩容;
12.数组缩减
13. 排序
内部排序:数据加载到内部存储器中进行排序
外部排序:不完全加载到内存中,借助外部存储排序
冒泡排序:序号从大到小,依次比邻,若逆序则交换
思路:
很多轮,每轮很多次,因此是嵌套循环;
外层循环:明确轮数是数组长度减一;还有一个关键点是,外层循环是用来循环次数的,所以不用非得从0开始,
内层循环:改变每轮中的次数(借助外层循环的变量),比邻和逆序交换。
14. 查找
顺序查找
二分查找
数组中的具体元素的写法:
6.2二维数组
1、二维数组直接赋值声明创建法:(静态初始化)
2、建立初步认识:
1)一维数组的每一个元素变成一个数组就组成了一个二维数组;也就是说二维数组的每一个元素都是一个数组;
2)有趣的是遍历二维数组需要两层循环,第一层遍历二位数组长度,第二层遍历二维数组的每个元素的长度;
3)访问第i+1个一维数组的第j+1个值的语法是a[i][j];
4)习惯于说第几个的时候在索引的基础上加1;。
3、二维数组内存布局
栈里面有一个二维数组,指向堆里面的一个地址,地址里有两个空间,但是因为是二维数组,所以每个空间里存放的并不是一个具体的值,而是地址,这个地址对应的堆的空间里存放的就是二维数据的一维数组的具体数据;
4、二维数组动态初始化-1
5、二维数组的每个一维数组维度可以不一样,二维数组动态初始化-2
二维数组动态初始化总结:
1)什么是二维数组动态初始化:
先声明,后创建:
1. 整个数组:
2. 只有列是稍晚创建;
2)如何声明:
Int arr[][];//整个数组
Int arr[][] = new int[3][];只有列
3)如何创建:(等号前面是被创建的空间前面一层的名字)
Arr= new int[3][2];
复杂一些:Arr[i] = new int[i+1];
【二维数组例题】
创建数组、赋值、输入、输出,都应该是若干分立的循环做的事;
杨辉三角
一个要点:
输出的\t 要加双引号而不是单引号;
5、二维数组的使用细节和注意事项
6.3本章练习题
这道题第一次写的时候出现了超过索引的问题,原因在于赋值的循环内部,给旧数组和新数组用了相同的索引,==========后来给旧数组分配了另一个索引j问题就解决了。
【遗忘了的知识点】
生成随机数的函数:(int)(Math.random()*100)+1;
学习资源:韩顺平java零基础