章节一:数组


数组(Array)定义:是多个相同类型的数据按照一定顺序排列的集合,并使用一个名字命名

数组本身是引用数据类型,数组中的元素可以是任何数据类型

创建数组对象会在内存中开辟一整块连续的空间。元素在内存中是依次紧密排列的,有序的

数组一旦初始化完成,他的长度就是确定的,不能修改

1.一维数组的使用(6个基本点)

数组的声明和初始化

调用数组的指定元素

数组的属性;length表示数组的长度

数组的遍历

数组元素的默认初始化

整形数组元素的默认初始化值:0

浮点型:0.0

字符型:0 \u0000

boolean型:flase

引用数组类型:null

一维数组的内存解析

java中的内存结构是如何划分的?首先了解一下JVM架构

将内存区域划分为5个部分:程序计数器,虚拟机栈,本地方法栈。堆,方法区

与目前数组相关的内存结构:虚拟机栈:用于存放方法中声明的变量如:arr

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

栈:先进后出

堆:先进先出

2.二维数组的基本使用

二维数组更像是一个表格,像Excel中的表格,或者围棋棋盘一样,一维数组里面套了一个一维数组

声明与初始化

调用数组的元素

数组的属性:长度

数组的遍历

数组元素的默认初始化

第一种

第二种

二维数组内存解析

3.数组的常见算法

1.数值型数组特征值统计

特征值涉及到:平均值、最大值、最小值、总和等

2.数组元素的赋值(实际开发中,遇到的场景较多)

3.数组的复制

复制,重新给了一个地址

4.数组的反转

5.数组的扩容与缩容

6.数组元素的查找

顺序查找:

优点:简单

缺点:执行效率低,时间复杂度O(N)

二分查找:

优点:执行效率高.执行的时间复杂度O(logN)

缺点:算法较为难一点,数组必须是有序排序

7.数组的排序

衡量排序算法的优劣:

1.时间复杂度:

2.空间复杂度:

3.稳定性:AB两个值相等,排序后AB的先后次序不变,就是稳定的

冒泡排序:

时间复杂度:O(n²)

空间复杂度:O(1)

稳定排序

快速排序:

时间复杂度:O(nlog2n)

空间复杂度:O(nlog2n)

不稳定排序

4.工具类Array的使用

位置:在java.util.Arrays

比较两个数组的元素是否一次相等:Arrays.equals(int [] a,int[] b)

输出数组元素的信息:String toString(int[] a)

将指定值填充到数组之中:fill(int[] a,int val)

使用快速排序算法实现的排序:sort(int[] a)

二分查找:binarySearch(int[] a,int key)

返回负数表示没找到

5.数组使用中常见的异常小结

数组的索引越界异常:ArrayIndexOutOfBoundsException

空指针的异常:NullPointerException

6.企业真题

1.数组有没有length()这个方法?String有没有?

数组没有,length是属性

String有

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

数组的索引,表示了数组元素距离首地址的偏离量。第一个元素的地址与首地址相同,偏移量为零

文章摘自:https://www.cnblogs.com/Zz-sky/p/20257597