数组操作知识点小结
数组地址转移问题
数组名是一个引用数据类型的变量,其中保存的是数组占用堆空间首地址,数组名之间的赋值操作,如:
int[] arr1 = new int[10];
int[] arr2 = new int[10];
arr2 = arr1;
只是将 arr1 中保存的地址赋值给 arr2 ,即:当执行 arr2 = arr1; 后,arr1与arr2指向堆空间中的同一地址(arr1中保存的数组占用堆空间首地址);
详见图例:
class Demo1 {
public static void main(String[] args) {
int[] arr1 = new int[10];
int[] arr2 = new int[10];
arr1[0] = 10;
arr2[0] = 20;
arr1[5] = 50;
arr2 = arr1;
arr1[0] = 30;
arr2[0] = 100;
System.out.print("arr1 : ");
printArray(arr1);
System.out.print("arr2 : ");
printArray(arr2);
}
/**
* 该方法对传入数组进行循环遍历并打印输出数组元素
*
* @param arr int类型数组
*/
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
结果为:
arr1 : 100 0 0 0 0 50 0 0 0 0
arr2 : 100 0 0 0 0 50 0 0 0 0
数组作为方法的参数
在main方法中 (String[] args)就是给数组作为方法参数格式,main方法需要的参数是一个String类型数组。
格式:public static 返回值类型 方法名(数据类型[] 数组名)
例1:找出元素30对应的下标位置
/*
需求:
找出元素30对应的下标位置
方法分析:
固定格式:public static 不要问
返回值类型:int类型,返回指定元素的下标位置,没有找到返回-1
方法名:indexOf 获取指定元素对应下标
形式参数列表:
int[] arr:查询数据的源数组,在哪一个数组中进行查询操作,这里需要一个int类型数组
int find:指定在数组中查询的元素
(int[] arr, int find)
方法声明:
public static int indexOf(int[] arr, int find)
*/
class Demo2 {
public static void main(String[] args) {
int[] array = {10, 8, 35, 67, 31, 25, 11, 30, 28, 99};
int find = 30;
//调用方法,传入数组名,与查询的元素find
int index = indexOf(array, find);
if (index >= 0) {
System.out.println("index : " + index);
} else {
System.out.println("Not Found 未找到!!");
}
}
/**
* 在指定数组arr中,查询指定元素find所在的下标位置,找到返回值大于等于0,没有找到
* 返回-1
*
* @param arr 查询数据的源数据数组,int类型数组
* @param find 指定在数组中查询的数据,也是对应int类型
* @return 找到指定元素,返回值大于等于0,否则返回-1
*/
public static int indexOf(int[] arr, int find) {
int index = -1;
for (int i = 1; i < arr.length; i++) {
if (find == arr[i]) {
index = i;
break;
}
}
//返回index中保存的数据到方法外
return index;
}
}
结果为:index : 7
例1方法的运行内存如图所示
例2:
/*
需求:
删除数组中的指定下标的元素
存在一个数组,数组中的元素为
int[] array = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
要求:
1. 0是无效元素,仅占位使用
需求:
在当前数组中删除指定下标的元素
例如:
删除下标5的元素
结果 {1, 3, 5, 7, 9, 13, 15, 17, 19, 0}
0占位!!!
方法分析:
固定格式:public static
返回值类型:在数组中删除指定下标的元素,不需要返回值
方法名:delete
形式参数列表:传入一个int类型数组,int类型数据指定的下标位置index
(int[] arr, int index)
【方法声明】
public static void delete(int[] arr, int index)
*/
class Demo3 {
public static void main(String[] args) {
int[] array = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
delete(array, 5);
printArray(array);
delete(array, 5);
printArray(array);
delete(array, 5);
printArray(array);
}
/**
* 该方法传入一个数组,然后根据传入的指定的数组下标位置index,删除该位置的元素
*
* @param arr int类型数组
* @param index int类型数据 指定下标位置
*/
public static void delete(int[] arr, int index) {
for (int i = index; i < arr.length - 1; i++) {
arr[i] = arr[i + 1];
}
//为数组最后一位赋值0,占位使用
arr[arr.length - 1] = 0;
}
/**
* 该方法对传入数组进行循环遍历并打印输出数组元素
*
* @param arr int类型数组
*/
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
结果为:
1 3 5 7 9 13 15 17 19 0
1 3 5 7 9 15 17 19 0 0
1 3 5 7 9 17 19 0 0 0