30 数组排序案例分析
类中没有数据,可以使用static 静态方法,直接使用类名调用
// 封装起来的数组工具类 class ArrayUtil{ public static void sort(int[] arr){ // 第一层 控制比较次数 length - 1 for(int y = 0; y < arr.length - 1; y++){ // 第二层 无序区做比较即可 length - n - 1 for(int x = 0 ; x < arr.length - y - 1; x++){ if(arr[x] > arr[x+1]){ int temp = arr[x]; arr[x] = arr[x + 1]; arr[x+1] = temp; } } } } public static void printArray(int[] arr){ System.out.print("[ "); for(int x : arr){ System.out.print(x); System.out.print(" "); } System.out.println("]"); } public static void main(String[] args) { int[] arr = new int[] {4, 5, 1, 3, 2}; ArrayUtil.sort(arr) ; ArrayUtil.printArray(arr); // [ 1 2 3 4 5 ] } }
31 数组转置案例分析
方式一:
使用临时数组,增加了垃圾
public static int[] reverse(int[] arr){ int[] temp = new int[arr.length] ; int foot = arr.length - 1 ; for(int i = 0; i < arr.length ; i++){ temp[foot--] = arr[i]; } return temp; } public static void main(String[] args) { int[] arr = new int[] {1, 2, 3, 4, 5}; arr = ArrayUtil.reverse(arr) ; ArrayUtil.printArray(arr); // [ 5 4 3 2 1 ] }
java中整数相除,向下取整
System.out.println(5/3); // 1 System.out.println(5.0/3); // 1.66
方式二:
使用数组自身交换,使用if,增加了时间复杂度
public static void reverse(int[] arr){ int center = arr.length / 2; int head = 0; int tail = arr.length - 1; for(int i = 0; i < center ; i++){ int temp = arr[head]; arr[head] = arr[tail]; arr[tail] = temp; head ++; tail --; } } public static void main(String[] args) { int[] arr = new int[] {1, 2, 3, 4, 5}; ArrayUtil.reverse(arr) ; ArrayUtil.printArray(arr); // [ 5 4 3 2 1 ] }
32 数组相关类库
1、数组排序
java.util.Arrays.sort(数组)
int[] arr = new int[] {5, 4, 2, 3, 1}; java.util.Arrays.sort(arr); ArrayUtil.printArray(arr); // [ 1 2 3 4 5 ]
2、数组拷贝
System.arraycopy(源数组, 源数组开始点, 目标数组, 目标数组开始点, 拷贝长度)
int[] arr1 = new int[] {1, 2, 3, 4, 5}; int[] arr2 = new int[] {11, 22, 33, 44, 55}; System.arraycopy(arr1, 1, arr2, 1, 3) ; ArrayUtil.printArray(arr2); // [ 11 2 3 4 55 ]
自定义方法实现
public static void arraycopy(int[] source, int sourceIndex, int[] target, int targetIndex, int length){ for(int i = 0 ; i < length; i++){ target[targetIndex + i] = source[sourceIndex + i]; } } public static void main(String[] args) { int[] arr1 = new int[] {1, 2, 3, 4, 5}; int[] arr2 = new int[] {11, 22, 33, 44, 55}; ArrayUtil.arraycopy(arr1, 1, arr2, 1, 3) ; ArrayUtil.printArray(arr2); // [ 11 2 3 4 55 ] }
33 方法可变参数
JDK >= 1.5
// 接收可变参数 public static int getSum(int ... arr){ int sum = 0 ; for(int x : arr){ sum += x ; } return sum ; } public static void main(String[] args) { int sum1 = ArrayUtil.getSum(1, 2, 3, 4, 5); int sum2 = ArrayUtil.getSum(new int[] {1, 2, 3, 4, 5}); System.out.println(sum1); // 15 System.out.println(sum1); // 15 }