首页 > 代码库 > Java学习之数组 <好程序员特训营>
Java学习之数组 <好程序员特训营>
<A href="http://www.goodprogrammer.org/" target="blank">android培训</a>------我的java笔记,期待与您交流!
1.数组内存----栈 堆
栈内存:数据使用完毕,会自动释放
堆内存:放的都是 new 出来的实体(对象或数组),有内存地址值,且数组都有默认值,例如:0,false,0.0,当堆内存中实体无引用后,一段时间内会被JVM的垃圾回收机制回收,释放内存
例如: (1) int x=1; 只在栈内存中生成 x=1
(2) int[] x = new int[3]; 在栈内存中生成 x,在堆内存中生成 new int[3],并将new int [3]的首地址值(十六进制,如:0x0078)赋给x
2.两个引用指向同一地址
int[] x = new int[3];
int[] y = x;
y[1]=1; --->x[1]=1
3.排序
//选择排序public static void selectSort(int[] arr){ for(int x=0;x<arr.length-1;x++){ for(int y=x+1;y<arr.length;y++){ if(arr[x]>arr[y]){ swap(arr,x,y); } } }}//冒泡排序public static void bubbleSort(int[] arr){ for(int x=0;x<arr.length-1;x++){ for(int y=0;y<arr.length-1-i;y++){ if(arr[y]>arr[y+1]){ swap(arr,y,y+1); } } }}//位置交换public static void swap(int[] arr,int x,int y){ int temp = arr[x]; arr[x]=arr[y]; arr[y]=temp;}//Java中定义好的一种排序方式Arrays.sort(arr);//Java中定义好的输出printArray(arr);
4.查找
(1).折半查找(第一种方式)(前提是数组已经排序)public static int halfSearch(int[] arr,int key){ int min,max,mid; min = 0; max = arr.lenth-1; mid = (max + min)/2; while(arr[mid] != key){ if(key > arr[mid]) min = mid + 1; else if(key < arr[mid]) max = mid - 1; if(min > max) return -1; mid = (max + min)/2; } return mid;}(2).折半查找(第二种方式)public static int halfSearch(int[] arr,int key){ int min = 0,max = arr.length-1,mid; while(min<=max){ mid = (max + min)>>1; if(key>arr[mid]) min = mid + 1; else if(key < arr[mid]) max = mid - 1; else return mid; } return -1;}
5.查表法:将所有元素临时存储起来,建立对应关系
//十进制--->二进制、八进制、十六进制public class Test { public static void main(String[] args) { toBin(12); toBin(-7); toBa(12); toBa(-7); toHex(12); toHex(-7); } //十进制-->二进制 public static void toBin(int num){ trans(num,1,1); } //十进制-->八进制 public static void toBa(int num){ trans(num,7,3); } //十进制-->十六进制 public static void toHex(int num){ trans(num,15,4); } //转换函数 public static void trans(int num, int base, int offset) { if(num == 0){ System.out.println(0); return ; } char[] chs = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘ }; char[] arr = new char[32];// 默认值"\u0000",代表空字符 int pos = arr.length; while (num != 0) { int temp = num & base; arr[--pos] = chs[temp]; num = num >>> offset; } for (int i = pos; i < arr.length; i++) { System.out.print(arr[i]); } System.out.println(); }}
6.二位数组定义
(1).规则 int[][] arr = new int[2][3];
(2).不规则 int[][] arr = new int[3][];
int[0] = new int[3];
int[1] = new int[2];
int[2] = new int[5];
(3).特殊 int[]arr[] = new int[2][3]; 正确
int[] x,y[]; 正确,定义的是一个x[]和一个y[][]
Java学习之数组 <好程序员特训营>