定义
多个相同类型数据 按一定顺序排列的集合
连续空间 容器
java 中的容器 => 在内存中对多个数据的存储
一旦初始化完成,其长度就确定了,并且其长度不可更改
ArrayList的底层实现是通过一个数组来存储元素,当数组容量不足时,会创建一个新的数组并将原有 元素复制到新数组中。
'下标'提问
为什么数组要从0开始编号而不是1
- 数组的索引,表示了数组元素距离首地址的偏移量 第一个元素的地址与首地址相同 所以偏移量就是0
一维数组
- 简单图示
二维数组
一维数组array1 又作为另一个一维数组array2元素而存在
数组底层运行机制来看 其实没用多维数组
int[][] arr = new int[][]{{1,2,3},{4,5}};
arr.length => 2
arr.length => 3
int[][] arr1 = new int[3][4];
外层元素: 默认存储地址值
内层元素: 默认存储规定类型元素
int[][] arr2 = new int[3][];
外: 默认存储 null
内: 不存在
内存解析
与数组相关的内存结构
虚拟机栈: 用于存放方法中声明的变量
堆: 用于存放数组中的实体
一维数组
int[] arr=new int[]{1,2,3};
int[] arr1=arr;
二维数组
String[][] arr = new Stirng[3][2];
String [][] arr = new String[3][];
常见算法
扩容/缩容
- 新建数组 2.数据迁移 3. 地址更替
冒泡排序
时间复杂度
两两对比 换位 最大最后面
1. 2 4 1
2. 2 1 4
3. 1 2 4
快速排序
时间复杂度 2为底
核心替换代码
while (true) {
whilt (low < end && data[++low]-base<=0);
whilt (high < start && data[--high]-base>=0);
if(low < high){
//交换data数组[low]与[high] 元素
swap(data,low,high);
}else{
break;
}
}
Arrays 工具类
- 例 Arrays.sort(arr); 快速排序