数组的初始化
-
数组的动态初始化(数组初始化完成后,数组的元素为对应的类型的默认是)
-
数据类型 数组名称[] = new 数据类型[数组长度];
int i[] = new int[10];//10 个元素默认值都为 0
-
数据类型 []数组名称 = new 数据类型[数组长度];
int []i = new int[10];
-
-
数组的静态初始化(数组初始化完成时就定义好了每个元素的内容)
-
(不推荐 )简单模式:数据类型 [] 数组名称 = {元素 1, 元素 2,元素 3 …}
int i[] = {1,2,3,4}; int []a = {4,3,2,1};
-
(推荐 )完整模式:数据类型 [] 数组名称 = new 数据类型[]{元素 1, 元素 2,元素 3 …}
int i[] =new int[] {1,2,3,4}; int []a = new int[] {4,3,2,1};
-
数组元素的访问
开发人员可以使用角标进行数组元素的访问,角标从 0 开始往后顺序叠加,所以角标最大值为数组的长度 -1。
例如
int arr[] = new int[]{1,2,3}
开发人员想要字节获取数组中的第二个数据,则可以使用如下代码获取
int result = arr[1]
当然也可以进行修改
arr[1]=10
请注意,获取数组数据时,下标不能超过数组长度 -1,如果超过会出现在“ArrayIndexOutOfBoundSException”即数组越界异常。
数组长度可以通过数组名称.length 获取。如:
int arrLength = arr.length;
数组排序问题分析
冒泡算法
分析
分 2 层循环,内层循环不难发现是为了把最大的值排序到数组的最后一个元素。
那么同理,如果要按照顺序对数组进行排序,则需要执行多次该操作,依次排列元素的值。
由于要执行最少的次数得到正确的结果,所以对外层循环进行优化,即,每次排序之后由于最大值已经在数组的最后一个下标上,那么再次排序时,第二大的值只需要到倒数第二个下标便不必再进行循环了。所以在内层循环循环时,只需要循环 arr.length-j- 1 则足够了。
思路是:
第一步,将最大值找出来并置于最后
for (int i = 0; i < arr.length -1; i++) {if (arr[i] > arr[i+1]) {int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
第二步考虑,按照数组的长度再循环一次必定能排出最大值。则在外层包一个循环
for (int j = 0; j < arr.length; j++) {for (int i = 0; i < arr.length-1; i++) {if (arr[i] > arr[i+1]) {int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
第三步,考虑到由于每次内层循环执行一个完整的循环之后,就能将一个元素按照大小排列出来,那么进行优化,希望能以最少的循环次数就能得到结果。所以最终代码就如下
public static void sortArrayAsc(int[] arr) {for (int j = 0; j < arr.length; j++) {for (int i = 0; i < arr.length -j -1; i++) {if (arr[i] > arr[i+1]) {int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
}
数组反转
即将数组的元素顺序倒置。2 种方法
- 新建一个数组,倒序存储数组,代码如下:
public static int[] reverseArrary(int[] data) {int[] newArr = new int[data.length];
for (int j = 0 ; j < data.length; j++) {newArr[newArr.length-j-1] = data[j];
}
return newArr;
}
- 倒置原数组的元素
public static void reverseArray2(int[] data) {
int center = data.length/2; // 确定转换的次数, 无需判断奇数或偶数
int head = 0;
int end = data.length-1;
for (int i = 0; i < center; i++) {int temp = data[head];
data[head] = data[end];
data[end] = temp;
head++;
end--;
}
}