0%

Java基础--04数组

数组

  • 数组定义(声明和初始化):int[] arrays = new int[16];
  • 数组名arrays、索引(0-arrays.length)、元素arrays[1]、数组长度arrays.length

数组特点

  • 数组创建会在内存开辟一整块连续的空间(堆空间),大小取决于数组(长度和数组中元素数据类型)
  • 数组的长度确定后,无法修改,数组扩容,新创建数组,复制,新的数组赋给旧数组(地址)。(原来地址的会被GC回收)
  • 数组元素在内存中是依次紧密排序的,有序的。
  • 数组,属于引用数据类型;数组元素,既可以是基本数据类型,也可以是引用数据类型。

一维数组的内存结构

  1. [Java虚拟机内存划分](.\01 Java虚拟机的内存划分.md)

  2. 与数组相关的内存结构。 ep:int[] arr = new int[]{1,2,2}

    • 虚拟机栈:用于存放方法中声明的变量。 ep:arr

    • 堆:用于存放数组中的元素。 ep:1,2,2

  3. 一维数组内存解析

    image-20230727095411924

    image-20230727102109528

  4. 二维数组内存解析

image-20230727103903064

数组中常见的算法

  1. 特征值计算:最大、最小、平均、求和
  2. 赋值、反转、复制
  3. 扩容和缩容:新创建,数组的长度确定后,无法修改,数组扩容,新创建数组,复制,新的数组赋给旧数组(地址)。(原来地址的会被GC回收)
  4. 元素查找:二分查找、线性查找
  5. 排序:快速排序、冒泡排序、堆排序……

$\textcolor{red}{TODO 算法后续再来}$

Arrays工具类

  • 升序排序、指定范围升序排序:

    • 快速排序:sort
    • 并行排序:parallelSort
  • 数组元素交换:swap

  • 前缀累加:parallelPrefix。parallelPrefix([2,1,0,3]) = [2,3,3,6]

  • 数组拼接:toString

  • 数组元素的二分查找:binarySearch

  • 数组比较:equals

  • 数组赋值(每个元素):fill

  • 数组复制:copyOf

数组常见异常

  • 数组越界
  • 空指针异常

企业真题:

  1. 数组没有length() 方法,是length 属性。
  2. 数组的索引,表示数组元素距离首地址的偏移量。
  3. 排序、查找的算法相关