数组
数组,是一个用来存储相兼容数据类型的容器。
容量:在数组中,表示能够存储多少个数据。在数组中“容量”被称为 – 长度。
特点:
1、数组中只能存储相兼容的数据类型。
2、数组的长度是不可变的,一旦实例化完成,长度不能修改!
元素:
在数组中存储的每一个数据,被称作是数组的元素
1. 数组的定义
对数组进行定义,并进行初始化的赋值操作,这个过程称作数组的 实例化
数组实例化的过程,需要关键字 new
以后在任意的位置,只要是看到了
new
,都代表需要在 堆 上开辟空间。
// 1. 数组的定义、声明
// int[] arr1;
// 2. 数组的实例化
// 由于数组长度不可变,因此在实例化数组的时候,必须确定数组的长度
// 关于数组中存储的元素默认的值:
// 整型默认为 0
// 浮点型默认为 0.0
// 布尔型默认为 false
// 字符型默认为 \u0000
// 引用数据类型默认为 null
// 2.1. 实例化一个数组,长度是10。此时这个数组中有10个元素,他们都是0。
int[] arr1 = new int[10];
// 2.2. 实例化一个数组,并填充每一个元素的值。此时,数组的长度由元素的个数决定。
int[] arr2 = new int[] { 1, 3, 5, 7, 9, 0, 8, 6, 4, 2 };
// 2.3. 针对2.2的一个小的优化:省略 new int[]
int[] arr3 = { 1, 3, 5, 7, 9, 0, 8, 6, 4, 2 };
2. 数组的元素访问
其实就是访问数组中的每一个元素。并且我们对数组中的每一个元素进行访问,其实无非就是两种操作:读、写
访问数组中的元素,需要通过下标
下标 就是一个元素在数组中的位置,是一个索引值。但是,数组中元素的下标是从0开始的!
Q: 数组中元素的下标范围是多少?
A: [0, 数组长度-1]
数组长度: array.length
// 1. 实例化一个数组
String[] array = { "Li Lei", "Han Meimei", "Lily", "Lucy", "Jim Green", "Tom", "Uncle Wang", "Polly" };
// 2. 访问数组中的元素
// 读元素
// System.out.println(array[6]);
// 写元素
// array[5] = "Jerry";
// System.out.println(array[5]);
// 3. 如何遍历一个数组
// 依次获取到数组中的每一个元素
// 3.1. 遍历下标,依次获取数组的每一个下标
for (int index = 0; index < array.length; index++) {
System.out.println(array[index]);
}
System.out.println("-----------------------------------------------");
// 3.2. 使用增强for循环(foreach、forin)
// 逻辑: 依次取出数组array中的每一个元素,给ele进行赋值
for (String ele : array) {
System.out.println(ele);
}
在进行数组遍历的时候,使用下标遍历和增强for循环的区别:
1、增强for循环的效率比下标遍历高。
2、在增强for循环中不能修改集合的长度。
3、在增强for循环中迭代变量(上方的ele),其实是一个常量,不能修改的。
使用场景:
1、如果仅仅是为了拿到每一个元素,使用增强for循环。
2、如果需要在遍历的同时,拿到元素对应的下标,使用下标遍历。
3、如果需要在遍历的同时,对数组中的元素内容进行修改,使用下标遍历。
3. 数组的内存分析,引用
int[] array = new int[5];
[外链图片转存失败(img-FLrWen7s-1562073123545)(./images/array_memory.png)]
引用数据类型的特点:
public static void main(String[] args) {
int[] array = { 10 };
change(array);
System.out.println(array[0]); // ?
}
static void change(int[] array) {
array[0] = 100;
}
[外链图片转存失败(img-EAGs1TH9-1562073123546)(./images/array_reference.png)]
4. 数组的基本操作
数组的查询
查询某一个元素在数组中出现的下标。一般情况下,如果要查询的元素不存在,需要得到-1。
1、顺序查询
从前往后依次遍历数组中的每个元素,用每一个元素和要查询的元素进行比较。直到找到要查询的元素下标。
int index = -1;
for (int i = 0; i < array.length; i++) {
if (array[i] == 9) {
index = i;
break;
}
}