目标
- 数组在内存中的存储方式
- 数组的几个要素
- 数组相关的语法
- 数组的遍历
- 数组的相关算法
什么是数组
数组, 一组数据, 一组相同类型的数据. 在内存中, 数组是一串连续的物理空间.
实际上, 数组也是一个变量, 只不过这个变量中存储的是数组首元素的内存地址 由于数组中的元素类型相同 ( 每个格子的大小相同 ), 物理上又是连续的, 所以: 要对数组中的3号元素进行读写, 这样寻址即可:
3号元素的地址 = 首地址 + 3 * 元素类型大小
数组的几个要素:
- 数组名称 ------表示首地址
- 数组类型/元素类型
- 长度/元素个数
- 元素的值 ( 元素称为Element或Item )
注意:
长度一旦确定, 不可改变, length是只读的, 数组的长度是: array.length 元素的下标从0开始,
最后一个元素的下标是length1
数组中的元素通过下标来访问, 但是下标不能超出0(length1)的范围, 否则产生越界异常(ArrayIndexOutOfBoundsException).
语法
- 声明数组:
int[] myArray; // 告诉系统: 我要存储一组int型的数据
- 分配空间:
myArray = new int[5]; // 告诉系统: 我需要5个4字节空间, 共20字节
- 访问数组中的元素 ( 读/写 )
myArray[3] = 9527; // 把9527写到这个数组的3号元素中
int number = myArray[3] * 2; // 读3号元素的值, 参与表达式运算
创建数组的一些特殊语法:
循环遍历数组
顺序遍历
1 for(int i = 0; i < 数组名.length; i++) {
2 // i 天生就是数组元素下标!
3 ..... 数组名[i] .....
4 }
要注意不能写成 i <= 数组名.length, 会越界!!!
也可以反向遍历:
for(int i = 数组名.length‐1; i >= 0; i‐‐) { }
还可以使用foreach方式遍历:
基于数组的常见算法
排序: 排序算法很多, 冒泡, 快速, 归并, 堆排序, 插入排序, … *
冒泡排序口诀: N个元素来排队, 两两相比小靠前, 外层循环N1, 内层循环N1i
java中的java.util.Arrays类提供了sort方法对数组进行方便地排序:
1 Arrays.sort(数组名);
查找元素:
如果一个数组是乱序的, 要查找其中的元素, 通常只能循环挨个比较, 但要注意在循环结 束之前, 不要轻易下结论!
如果数组是有序的, 可以使用二分查找法: 直接和中间位置的元素比较, 根据大小关系, 可以直接缩小一半的查找范围
找最大值/最小值
打擂台法