# 数组

变量本身用于存储数据,但是只能存储一个

用于存储多个数据的容器,但是存储的时候要求存储的数据的类型必须一致;数组定义好之后大小是不可变的

数组会对存入其中的数据(元素)进行自动的编号,编号是从0开始 --- 下标

# 定义格式

数据类型[] 数组名 = new 数据类型[数组的大小/元素的个数]; --- 适合于元素未知但是元素个数已知的场景

int[] arr = new int[5]; 表示定义了一个能存储5个整型数字的数组,也就意味着这个数组的最大下标是4

arr[2] = 5; 表示向下标为2的位置存放一个元素5

System.out.println(arr[2]);

数据类型[] 数组名 = new 数据类型[]{e1,e2,e3...}; --- 适合于元素已知的场景

int[] arr = new int[]{3,4,0,5,9}; --- 表示定义了一个元素类型为整数的数组,并且数组中初始的元素是3,4,0,5,9,同时也规定了数组的大小为5

arr[1] = 7; --- 表示将下标为1的位置上的元素改为7

数据类型[] 数组名 = {e1,e2,e3...}; --- 本身是一种静态初始化方式,不允许声明和初始化的过程分开

# Java内存结构

Java将所占用的内存分为5块:栈内存堆内存方法区、本地方法栈、PC寄存器

# 栈内存

栈内存本身是用于存储变量的。变量一旦使用完成,会立即从栈内存中移除

# 堆内存

堆内存存储的是对象(数组本身也是一种对象)。存储在堆内存中的元素自动赋予初始值 byte/short/int - 0 long - 0L float - 0.0f double - 0.0 char - '\u0000' boolean - false,其他类型的初始值都是null。当这个对象使用完成之后,不会立即移除出堆内存,而是在不定的某个时刻被垃圾回收器回收释放空间

boolean[] bs = new boolean[3]; boolean[0] -> false

String[] sarr = new String[5]; String[0] -> null

{width="5.0256944444444445in" height="2.1631944444444446in"}

{width="5.022222222222222in" height="1.7902777777777779in"}

{width="4.69375in" height="2.3722222222222222in"}

{width="5.7652777777777775in" height="2.511111111111111in"}

# 数组的应用

  1. 获取数组的元素 --- 数组名[下标]

  2. 获取数组的长度 --- 数组名.length

  3. 遍历数组

    1. 通过下标来遍历数组。下标的变化:0->length-1

    2. 通过增强for来遍历数组。定义一个变量来依次表示数组中的每一个元素。增强for循环不能改变数组中的元素的值

    3. 利用Arrays.toString(数组名)来将数组中的元素取出来拼接成字符串来显示

  4. 获取数组中的最值(最大值/最小值)

    1. 直接记录最值

    2. 记录最值的下标。这种方式既可以获取最值也可以获取最值出现的位置

  5. 数组元素的排序

    {width="5.3590277777777775in" height="2.420138888888889in"}

    {width="5.489583333333333in" height="1.5444444444444445in"}

  6. 翻转数组

    1. 定义一个新的数组来存储翻转之后的结果

    2. 首尾互换

  7. 获取指定的元素的下标

    1. 如果数组元素是无序的,只能遍历

    2. 如果数组元素是有序的,那么可以考虑二分查找/折半查找 ---

      时间复杂度O(logn)

  8. 数组的复制 --- System.arraycopy(要复制的数组, 复制的起始下标, 要存放的数组, 存放的起始下标, 要复制的元素个数);

    扩展:时间复杂度和空间复杂度

    时间复杂度 - 在程序中将会重复的代码的执行时间认为成单位1,那么这个单位1执行的次数就是时间复杂度 --- 在计算时间复杂度的时候要去找影响最大的一项,一般而言阶数越高影响越大;另外在计算时间复杂度的时候一般不考虑系数 --- 时间复杂度的形式一般是n^x^,(logn)^x^

    空间复杂度 - 在程序执行过程中会额外占用的空间数量。空间复杂度的形式一般是n^x^,(logn)^x^

    扩展:

<!-- -->
  1. 如果有一个数组,大小为99,存储了1-100之间的99个不重复的数字,意味着1-100之间有1个数字没有存入数组,找到这个数字

  2. 如果有一个数组,包含了一组数,这组数的特点是除了其中一个数字以外,其他的数字都出现了偶数次,只有一个数字出现了奇数次,找到这个出现了奇数次的数字

    2,2,3,5,3,2,2,3,5,3,6,7,3,6,3,7,6,7,8,7,8...

Last Updated: 11/18/2022, 10:55:14 AM