基本概念
- 一个数组只能存放一种数据类型
- 数组必须初始化
- 数组在初始化时就确定了长度,之后不能再更改
1、静态初始化:指定值,不指定长度
int[] a = new int[]{1,2,3,4}
//简化写法:
int[] a = {1,2,3,4}
2、动态初始化:只指定长度,系统会自动填充默认值
int[] a = new int[10]
- 整型,自动填充0
- 浮点型,自动填充0.0
- 布尔型,自动填充false
- 字符型,自动填充\u0000
- 引用类型,自动填充null
数组的遍历
- 使用for循环
- 使用foreach循环
- foreach得到的循环变量,不要去修改或赋值
- 那只是一个临时变量,并不是数组元素,对它赋值没有实际意义
- 通过Arrays.stream(Array array)方法将数组转换为stream,再用foreach遍历:
int[] a = new int[10];
Arrays.stream(a).forEach(i -> System.out.println(i));
数组的储存方式
-
数组是一个对象,对象都储存在堆内存中(heap)
- 所有new的对象都会放在堆内存中
- 不会随方法结束而销毁,以便反复利用
- 满足一定条件后,会被GC回收
- 直接将引用变量赋值为null,可以加快回收速度
-
定义在局部变量中的引用对象储存在栈内存中(stack)
- 初始化后,引用对象指向堆内存中的数组对象
- 当一个方法执行时,内部定义的所有变量都会放入栈内存
- 方法结束后自然销毁
-
基本类型数组的储存示意图
-
赋值后直接把基本类型数据填入数组中
基本类型数组的储存
-
-
引用类型数组的储存示意图
- 先在堆内存中新建要插入的对象
-
数组元素是引用类型,赋值后指向对象
引用类型数组的储存 - 如果通过lee和zhang修改了对应对象的内容,打印数组元素显示的内容也会变化,因为两者指向堆内存中的同一个对象
-
Arrays工具类常用方法
- int binarySearch(数组引用, key)——使用二分法查询一个key的索引,数组需要排序才能获得正确结果
- type[] copyOf(数组引用,length)——复制数组,创建一个新数组(也仅仅是创建引用,而不是新对象),根据length不同,新数组是前length位元素,或者超出后自动填充
- type[] copyOf(数组引用,int from, int to)——复制数组,索引从from到to
- boolean equals(数组引用1, 数组引用2),判断两者的数组元素是否相等,全部相等则返回true
- void fill(数组引用,内容), 设置所有数组元素
- String toString(数组引用),将数组转换为String,中间用逗号连接,两边用[]
网友评论