一、数组的定义
1. 格式一
数据类型[] 数组名 = new 数据类型[数组长度];
例:int[] array = new int[5];
即:定义存储 5 个 int 型数据元素的数组容器。
2. 格式二
数据类型[] 数组名 = new 数据类型[] {元素1, 元素2, ··· , 元素n};
例:int[] array = new int[] {1, 2, 3, 4, 5};
即:定义存储 1, 2, 3, 4, 5 的数组容器。
3. 格式三
数据类型[] 数组名 = {元素1, 元素2, ··· , 元素n};
例:int[] array = {1, 2, 3, 4, 5};
即:定义存储 1, 2, 3, 4, 5 的数组容器。
二、常见操作
1. 访问数组元素
① 索引( index )
直接打印 array 时,会输出该数组的哈希地址值,需要使用索引访问对应的元素,索引从 0 开始计算。
② 数组长度( length )
获取数组长度:数组名.length;
数组的最大索引为 数组名.length - 1;
③ 访问数组元素
数组名[index];
④ 示例
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int a = arr[0];
System.out.println(a);
}
}
2. 遍历数组
① 分析
* 遍历数组需要逐一将元素从数组中取出来。
* int a = arr[0]; //index = 0; a = 1
int b = arr[1]; //index = 1; b = 2
int c = arr[2]; //index = 2; c = 3
int d = arr[3]; //index = 3; d = 4
int e = arr[4]; //index = 4; e = 5
* 通过上面可以知道,将数组逐一取出只需要将 index++ 即可。
* 故可以通过循环来实现数组的遍历。
② 示例
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
3. 获取数组的最值
① 分析
* 假设第 0 号元素是最值
* 将数组中其他元素注意拿出来与第 0 号元素进行比较。
* 若其他元素大于/小于当前最值,则覆盖当前最值。
② 示例
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int max = arr[0]; //假设 arr[0] 是最大值
int min = arr[0]; //假设 arr[0] 是最小值
//遍历数组
for (int i = 0; i < arr.length; i++) {
//若数组元素大于 max 则替换 max
if (max < arr[i]) {
max = arr[i];
}
//若数组元素小于 min 则替换 min
if (min > arr[i]) {
min = arr[i];
}
}
System.out.println("最大值为:" + max + "最小值为:" + min);
}
}
4. 数组的反转
① 分析
* 将第 0 号元素与第 length - 1 号元素对换。
* 将第 1 号元素与第 length - 2 号元素对换。
···
* 将第 m 号元素与第 n 号元素对换。
* 直到所有元素对换完毕,即:m > length / 2 或 m > n
② 示例
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int temp; //声明一个临时变量
for (int i = 0; i < arr.length / 2; i++) {
//进行交换操作
temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
}
}
5. 数组作为参数和返回值
① 数组作为参数
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
array(arr); //数组做为参数,此时传递的是 arr 这个数组在堆内的地址值
}
public static void array(int[] array) {
//array 拿到了 arr 的地址值, 此时 array 数组就代表着 arr 数组,他们是一体两名。
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
② 数组作为返回值
public class Test {
public static void main(String[] args) {
int[] array = arr(); //将 arr 的地址值赋给 array,他们也是一体两名。
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
public static int[] arr() {
int[] arr = {1, 2, 3, 4, 5};
return arr; //数组做为返回值,此时返回的是 arr 这个数组在堆内的地址值
}
}
③ 传值与传址
* 传值:只是将数值传过去,相当于复制了一份,不会改变原来的。
* 传值:将数值的地址传过去,相当于两个人使用同一个东西,会改变原来的。
三、常见异常
1. 索引越界异常(IndexOutOfBoundsException)
① 见名知义,就是索引超过了数组所规定的界限(即超出了数组索引的最大范围)
② 示例
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr[5]); //当前索引最大值为 4 ,却要打印索引为 5 的元素。
}
}
2. 控指针异常(NullpointException)
① 空指针异常就是数组名并没有指向一个数组地址。
② 示例
public class Test {
public static void main(String[] args) {
int[] arr = null; //定义一个数组,地址值为空
System.out.println(arr[0]); //当前数组名并没有指向一个数组空间,却要打印一个不存在的元素
}
}
来源:oschina
链接:https://my.oschina.net/u/4144043/blog/3165258