JAVA-数组篇

102 阅读2分钟

定义

多个相同类型数据 按一定顺序排列的集合

连续空间 容器

java 中的容器 => 在内存中对多个数据的存储

一旦初始化完成,其长度就确定了,并且其长度不可更改

ArrayList的底层实现是通过一个数组来存储元素,当数组容量不足时,会创建一个新的数组并将原有 元素复制到新数组中。

'下标'提问

为什么数组要从0开始编号而不是1

  • 数组的索引,表示了数组元素距离首地址的偏移量 第一个元素的地址与首地址相同 所以偏移量就是0

一维数组

  • 简单图示

image.png

二维数组

一维数组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
 内: 不存在

内存解析

与数组相关的内存结构

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

堆: 用于存放数组中的实体

jvm.jpg

一维数组

  int[] arr=new int[]{1,2,3};
  int[] arr1=arr; 

image.png

二维数组

   String[][] arr = new Stirng[3][2];

image.png

  String [][] arr = new String[3][];

image.png

常见算法

扩容/缩容

  1. 新建数组 2.数据迁移 3. 地址更替

image.png

冒泡排序

时间复杂度 0(n2)0(n^2)

两两对比 换位 最大最后面

  1. 2 4 1
  2. 2 1 4
  3. 1 2 4

快速排序

时间复杂度 0(nlogn)0(nlogn) 2为底

米.jpg

核心替换代码

 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); 快速排序