数组
- 数组定义(声明和初始化):int[] arrays = new int[16];
- 数组名arrays、索引(0-arrays.length)、元素arrays[1]、数组长度arrays.length
数组特点
- 数组创建会在内存开辟一整块
连续的空间(堆空间)
,大小取决于数组(长度和数组中元素数据类型) 数组的长度确定后,无法修改,数组扩容,新创建数组,复制,新的数组赋给旧数组(地址)。(原来地址的会被GC回收)
- 数组元素在内存中是依次紧密排序的,有序的。
- 数组,属于引用数据类型;数组元素,既可以是基本数据类型,也可以是引用数据类型。
一维数组的内存结构
[Java虚拟机内存划分](.\01 Java虚拟机的内存划分.md)
与数组相关的内存结构。 ep:int[] arr = new int[]{1,2,2}
虚拟机栈:用于存放方法中声明的变量。 ep:arr
堆:用于存放数组中的元素。 ep:1,2,2
一维数组内存解析
二维数组内存解析
数组中常见的算法
- 特征值计算:最大、最小、平均、求和
- 赋值、反转、复制
- 扩容和缩容:新创建,
数组的长度确定后,无法修改,数组扩容,新创建数组,复制,新的数组赋给旧数组(地址)。(原来地址的会被GC回收)
- 元素查找:二分查找、线性查找
- 排序:快速排序、冒泡排序、堆排序……
$\textcolor{red}{TODO 算法后续再来}$
Arrays工具类
升序排序、指定范围升序排序:
- 快速排序:
sort
- 并行排序:
parallelSort
- 快速排序:
数组元素交换:
swap
前缀累加:
parallelPrefix
。parallelPrefix([2,1,0,3]) = [2,3,3,6]数组拼接:
toString
数组元素的二分查找:
binarySearch
数组比较:
equals
数组赋值(每个元素):
fill
数组复制:
copyOf
数组常见异常
- 数组越界
- 空指针异常
企业真题:
- 数组没有length() 方法,是length 属性。
- 数组的索引,表示数组元素距离首地址的偏移量。
排序、查找的算法相关