# 数组
变量本身用于存储数据,但是只能存储一个
用于存储多个数据的容器,但是存储的时候要求存储的数据的类型必须一致;数组定义好之后大小是不可变的
数组会对存入其中的数据(元素)进行自动的编号,编号是从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"}
# 数组的应用
获取数组的元素 --- 数组名[下标]
获取数组的长度 --- 数组名.length
遍历数组
通过下标来遍历数组。下标的变化:0->length-1
通过增强for来遍历数组。定义一个变量来依次表示数组中的每一个元素。增强for循环不能改变数组中的元素的值
利用Arrays.toString(数组名)来将数组中的元素取出来拼接成字符串来显示
获取数组中的最值(最大值/最小值)
直接记录最值
记录最值的下标。这种方式既可以获取最值也可以获取最值出现的位置
数组元素的排序
{width="5.3590277777777775in"
height="2.420138888888889in"}
{width="5.489583333333333in"
height="1.5444444444444445in"}翻转数组
定义一个新的数组来存储翻转之后的结果
首尾互换
获取指定的元素的下标
如果数组元素是无序的,只能遍历
如果数组元素是有序的,那么可以考虑二分查找/折半查找 ---
时间复杂度O(logn)
数组的复制 --- System.arraycopy(要复制的数组, 复制的起始下标, 要存放的数组, 存放的起始下标, 要复制的元素个数);
扩展:时间复杂度和空间复杂度
时间复杂度 - 在程序中将会重复的代码的执行时间认为成单位1,那么这个单位1执行的次数就是时间复杂度 --- 在计算时间复杂度的时候要去找影响最大的一项,一般而言阶数越高影响越大;另外在计算时间复杂度的时候一般不考虑系数 --- 时间复杂度的形式一般是n^x^,(logn)^x^
空间复杂度 - 在程序执行过程中会额外占用的空间数量。空间复杂度的形式一般是n^x^,(logn)^x^
扩展:
<!-- -->
如果有一个数组,大小为99,存储了1-100之间的99个不重复的数字,意味着1-100之间有1个数字没有存入数组,找到这个数字
如果有一个数组,包含了一组数,这组数的特点是除了其中一个数字以外,其他的数字都出现了偶数次,只有一个数字出现了奇数次,找到这个出现了奇数次的数字
2,2,3,5,3,2,2,3,5,3,6,7,3,6,3,7,6,7,8,7,8...