# 基本概念
数组是一组数据
是使用有序的方式对数据进行存储的一种结构
# 数组中的名词和属性
数组的元素
数组的索引/下标/角标:每个元素的门牌号(标识),
从0开始的数组可以根据下标获取元素:数组名[下标]
数组的长度:数组元素的个数,数组名.length
push与pop
push:在数组的尾部插入元素,返回值是添加元素后数组的长度
pop:从数组的尾部删除一个元素,返回值是删除的元素
# 数组的特性
- 长度是固定不可变的
- 所有的数据类型都有自己对应的数组
- 同一个数组数据类型必须一致
# 创建数组
- 静态创建/静态初始化
- 完整写法
数据类型[ ] 数组名 = new 数据类型[]{数据,数据,数据};
- 简便写法
数据类型[ ] 数组名 = new {数据,数据,数据}
- 动态创建/动态初始化
数据类型[ ] 数组名 = new 数据类型[长度];
系统会给默认值(出厂设置)
- 整数类型:0
- 浮点数类型:0.0
- 字符串(引用数据类型)类型:null
- char:0/空字符
- 布尔类型:false
# 直接打印数组名
[I@15db9742
- @ 分隔符
- [I 这个数据类型是int类型的一维数组
- 15db9742 是十六进制的内存地址
进制常识:十进制,没有十,0~9,10
二进制,没有二,0~1,10
十六进制,没有16,0~9 a b c d e f
# java内存结构
- 寄存器 由cpu直接调度
- 本地方法区 由本地操作系统调度
- 方法区 存储java编译好后的class文件的内容
- 堆 对象的实例(new出来的东西,等号的右边))
- 栈 基本类型的局部变量,对象的引用(等号左边)
# 数组的遍历
- 概念:想要一个一个获取数组的元素
- 方式一:单独的根据下标一个一个拿
- 方式二:使用循环遍历 i
例1
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for(let i = 0; i < arr.length; i++) {
let value = arr[i];
console.log(value);
}
# 输出结果:
# 1 2 3 4 5 6 7 8 9
# 数组中思想
- 累加的思想
在循环外面定义一个变量
在循环过程中进行“累”的运算
将没有规律的数据放在一个数组中进行统一遍历运算
-统计的思想
在循环遍历之外定义一个变量用于计数
在循环遍历过程中判断满足条件的情况下,计算器增加
- 求最值的思想
在循环遍历之外 定义变量 作为 参照物
在循环过程中 将参照物与每一个元素进行比对
如果元素比参照物大,将元素的值赋给参照物
# 数组的修改
- 元素的修改
数组名
- 地址的修改
int[] array={1,2,3,4}
array = new int[];
int[] arr = {1,2,4};
array = arr;// 数组的浅拷贝,赋值地址(本质上就是同一个对象,互相影响)
例1. map
map 此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变源数组
var arr = [1,2,3,4,5];
var newArr1 = arr.map(function(a){
// 将条件的结果返回到新数组中
return a > 5
})
例2.
deduce
var array = [1,2,3,4,5]; // a 累加和 b数组元素
var add = array.reduce(function(a,b){
return a += b
})
此方法是所有元素调用返回函数,返回值为最后结果,传入的值必须是函数类型
- 深拷贝
将某个数组中的每一个元素一个一个赋值给另一个数组
本质上是两个对象(两个数组,互不影响)
# Arrays.toString(array) //打印array数组中的内容