第十四天课堂笔记
- 课上: 适当做笔记
- 课下 : 总结 , 读代码 , 反复敲代码 , 做练习
数组★★★
- 数组 : 存储多个 同一类型 的容器
- 格式 :
- 数组类型 : 引用数据类型, new运算符在堆中 分配一块连续的存储空间 , 系统会给数组元素默认初始化 , 将该数组的引用赋值给数组名
- 引用数据类型包括 : 类 \ 接口 \ 数组 \ 枚举 \ 注解 \ record
- int[] 和 byte[] 是两个数据类型, 不存在想换赋值转换的情况
- 如何定义一个数组
-
动态初始化: 数据类型[] 数组名 = new 数据类型[长度];
-
数组的静态初始化
- 数据类型 [] 数组名 = new 数据类型 [] {值...};
- 简化为: 数据类型 [] 数据名 = {值 ...} : 仅用于数组的静态初始化, 不能用于给数组名重新赋值
-
注意 : new int[0] => 长度为0的数组,不能存储任何数据, 需要给该数组赋值一个长度大于0的数组才能使用
-
-
说明
-
索引值从0开始, 不能为负数, 索引值= [0 , 数组长度 - 1]
-
数组名[索引值] ==> 变量名
-
数组元素默认初始化值 : 0 , 0.0 , \u0000 , null , false
-
-
包名 : 公司域名反写 + 项目名 + 模块名
- 把类定义在包中后, 类的权限定类名(完整类名) = 包名.类名
-
char类型字符码值取值范围为 0 ~ 66535
数组循环遍历★★★
- for循环遍历: for(int i = 0 ; i < 数组长度 ; i++){system.out.println(数组名[i])}
- 数组长度 : 数组名.length
- 逆序快捷键 : 数组名.forr
- for循环 可以赋值 , 可以访问
- 遍历 foreach循环 : 增强的for循环
- for(数据类型 变量名 : 数组名) { 循环体 }
- 先将数组值依次赋值给变量 ,再执行循环体
- foreach仅用于访问
- 输入iter : foreach循环代码块 / 方法名.for
- Arrays.tostring(数组名);
数组扩容原理★
-
步骤
- 定义一个更大的数组
- 把原来数组中的数据复制到大数字中 :
- System.arraycope(src, srcPos , dest , destPos . length)
- 把src数组中从srcPos开始 的元素 复制到 dest 数组中 destPos 的位置上, 复制 length 个元素
- native关键字 : 方法体调用了C/C++编写的本地方法, 在Java程序中可以调用其他语言编写的代码
- 让原来数组名引用这个更大的 数组
位运算符★
- & , | , ~ , >> , << , >>>
数组特点★★★
-
优点 : 查询效率高
- 通过索引值 计算 每个数组元素的地址偏移量 ,==> ints + i * 数据所占字节数
- 通过计算出来的地址, 直接访问
-
缺点 : 插入删除效率低
-
插入步骤: 将一个值, 插入到数组i的位置上
- 定义一个更大的数组
- 把数组从0 到 i个元素 复制到big数组的0位置上
- 把值保存到数组i中
- 把数组从i 开始的元素, 复制到big数组的i+1位置上, 复制 ints.length - i个元素
-
数组在方法中的使用★★★★
- 数组在方法中的传递
- 方法 : 完成某个功能编写的代码 , 实现代码复用
-
数组作为方法返回值