用于存储相同数据类型的一组连续的存储空间
数组的长度一旦定义,则不可改变
访问数组的元素需要通过下标(索引)访问,下标从0开始
数组是引用数据内存,内存分布在堆内存中,数组的变量存储的内存地址
由于数组的长度定义后不能改变,所谓“动态数组”是可以增加数组的长度, 所以Java实现动态数组是改变数组变量指向不同的内存的地址。 本质并没有将数组的长度改变。
动态数组的本质: 将内存空间的改变, 以及指向数组内存的地址改变
操作1 : 给数组 添加新元素 ,可添加在最后面 ,也可添加到指定位置
/** * 添加元素 (添加到末尾) */ public static int [] addEle(int [] array ,int num){ // 目标数组 添加的原始 //int [] array = {10,9,3,2,1}; // 1、创建临时数组的变量 int [] tempArray = new int[array.length+1]; //2、将目标数组的元素 copy到 临时数组的内存中 for(int i = 0 ;i<array.length;i++){ tempArray[i]= array[i]; } // 3、将添加的元素放入临时数组中 tempArray[tempArray.length-1] = num; // 4、将目标数组的地址 指向 临时数组的地址 array= tempArray; // 由于tempArray 是局部变量, 方法执行完内存自动回收 , // 如果不返回 没有地址指向tempArray的内存 // 如果返回并接收,说明这块内存仍然有用。 return array; } /** * 将元素num 添加到指定index的位置 * @param arr * @param num * @param index * @return */ public static int [] addEle(int [] arr , int num ,int index){ // 1、创建临时数组的大小 int [] tempArray = new int[arr.length+1]; //2、遍历arr for(int i = 0 ; i<=arr.length;i++){ // 如果i<index if(i<index){ tempArray[i] = arr[i]; }else if(i==index){ // 2 tempArray[i] = num; }else{ // i > index // i=3 arr[i-1] 10 9 3 2 1 -> 10 9 5 3 0 0 // i =4 array[i-1] 2-> 10 9 5 3 2 0 // i=5 array[4] 1 -> 10 9 5 3 2 1 tempArray[i] = arr[i-1]; } } // 赋值 arr = tempArray; return arr; }操作2: 删除元素 ,删除指定下标的元素
/** * 删除指定下标的元素 * @param arr 目标数组 * @param index 删除的下标 * @return 删除之后的数组 */ public static int [] removeEle(int [] arr, int index){ // 1、创建一个临时数组 用于存放删除后的原始 int [] tempArray = new int [arr.length-1]; // 2、遍历目标数组 for(int i = 0 ;i<arr.length;i++){ if(i<index){ tempArray[i] = arr[i]; }else if(i==index){ continue; }else {//i>index tempArray[i-1] = arr[i]; } } // 3 将目标数组的地址变换成 新数组的地址 arr=tempArray; return arr; }
排序: 将一组数列(无序的)按照从小到大或者从大到小的顺序排列。
从第一个数开始, 与它相邻的数比较 ,较大(或较小)的数放在后面,最终比较一轮之后,得出最大(或最小)的数放在最后
比较思路:
冒泡排序的规则 * 1、从第一个数开始,将这个数 与它相邻的数比较 ,如果 这个数大于它相邻的数 * 则两个数交换位置 * i=0 相邻i=1 * 2、依次 从第二个数开始,再将这个数与它相邻的数比较,如果第二个数大于相邻的数 * 则继续交换 * 依次类推, 到倒数第二个截止 ,直到将最大的数放在最后面 * 3、重复以上1,2步骤 / public static void main(String[] args) { int [] array = {5,4,3,2,1}; //用于交换的临时变量 int temp=0; for(int j =0;j<array.length-1;j++) { for (int i = 0; i < array.length -j-1; i++) { // 相邻的数比较 if (array[i] > array[i + 1]) { temp = array[i]; array[i] = array[i + 1]; array[i + 1] = temp; } } System.out.println("比较一轮之后:" + Arrays.toString(array)); } }ay[i - 1]; array[i - 1] = temp; } } System.out.println(“每一次完成后的结果:”+ Arrays.toString(array)); } System.out.println(“最后一次完成后的结果:”+Arrays.toString(array));
}