(一)数组 同一类型集合,其实就是容器 int[] arr = new int[3]; 不明确容器中的具体数据,但知道个数 int[] arr = {1,2,3}; 存储已知的具体数据 1.打印数组/**打印数组 */ public static void printArray(int[] arr){ System.out.print("["); for(int i=0;i<arr.length;i++){ if(i == arr.length-1){ System.out.print(arr+"]"); }else{ System.out.print(arr+","); } } } 2.获取int[]的最大值/**获取int类型数组的最大值*/ public static int getMax(int[] arr){ int maxIndex = 0; for(int i=1; i<arr.length; i++){ if(arr> arr[maxIndex]){ maxIndex = i; } } return arr[maxIndex]; } 3.交换int[]的两个数的位置/**交换int类型的两个数的位置*/ private static void swap(int[]arr, int i, int j){ int temp = arr; arr = arr[j]; arr[j] = temp; } //交换两数位置,位操作效率高 private static void swap(int[] arr,int i,int j){ arr = arr^arr[j]; arr[j] = arr^arr[j]; arr = arr^arr[j]; } 4.选择排序/**选择排序*/ public static void selectSort(int[] arr){ for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ if(arr > arr[j]){ swap(arr, i, j); } } } } 5.提高性能的选择排序/**提高性能的选择排序*/ public static void selectSort2(int[] arr){ for(int i=0;i<arr.length-1;i++){ int minIndex = i; int minNum = arr; for(int j=i+1;j<arr.length;j++){ if(minNum > arr[j]){ minNum = arr[j]; minIndex = j; } } if(i != minIndex) swap(arr, i, minIndex); } } 6.冒泡排序/**冒泡排序*/ public static void maoPaoSort(int[] arr){ for(int i=0;i<arr.length-1;i++){ for(int j=0;j<arr.length-i-1;j++){ if(arr[j] > arr[j+1]){ swap(arr, j, j+1); } } } } 7.二分查找/**二分查找*/ public static int findEr(int[] arr,int val){ int min = 0; int max = arr.length-1; int mid = (min + max) >>>1; while(min <= max){ if(arr[mid]>val){ max = mid-1; }else if(arr[mid]<val){ min = mid+1; }else{ return mid; } mid = (min + max) >>>1; } return -(mid+1); } 8.进制转换,查表法/**进制转换,查表法*/ public static String MyToString(int num, int radix){ if(0 == num){ return "0"; } if(10 == radix){ return num+""; } //查表法 char[] dic = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; //临时数组与指针 char[] temp = new char[32]; int pos = 0; int ch; if(2 == radix){ while(num != 0){ ch = num & 1; temp[pos++] = dic[ch]; num = num >>>1; } }else if(8 == radix){ while(num != 0){ ch = num & 7; temp[pos++] = dic[ch]; num = num >>>3; } }else if(16 == radix){ while(num != 0){ ch = num & 15; temp[pos++] = dic[ch]; num = num >>>4; } }else{ return ""; } String str = ""; while(pos>0){ str += temp[--pos]; } return str; } (二)经验之谈/* 注意:代码就是思想的一种体现形式【先有思想--再有代码】 进制:计数的一种方式【2进制、8进制、10进制、16进制】 其他进制---10进制:求幂法 10进制---其他进制:求余法 1个16进制位 = 4个2进制位 1个8进制位 = 3个2进制位 负数的二进制 = 这个数的正数的二进制取反 + 1 编码表 ASCII Unicode:国际标准码表,java使用的码表 GB2312、GBK 内存划分 1. 寄存器 2. 本地方法区 3. 方法区 4. 栈内存:存储局部变量 5. 堆内存:存储对象实体 */
|