1、for与while相比
for控制循环的变量只作用于for循环,执行完毕释放内存。
比while节省内存
2、重载
函数名同,参数列表不同
与返回值无关
3、内存的划分:
(1)寄存器。
(2)本地方法区。
(3)方法区。
(4)栈内存。局部变量
(5)堆内存。new出来的实体(数组、对象)
4、栈,自动释放内存
堆,java垃圾回收机制,不定时。
5、数组的两种异常
ArrayIndexOutOfBoundsException: 操作数组时,访问到了数组中不存在的下标。
NullPointerException: 空指针异常,当引用没有任何指向,值为null的情况,该引用还在用于操作实体。
6、s.o.p(arr)
[[email protected]
数组,整数类型,地址为,哈希值(16进制)
7、选择排序
第一圈,最值出现在第一位
1 package array; 2 public class ArrayTest { 3 public static void selectSort(int[] arr) 4 { 5 for(int x=0;x 6 { 7 for(int y=x+1;y 8 { 9 if(arr[x]>arr[y]) 10 { 11 int temp=arr[x]; 12 arr[x]=arr[y]; 13 arr[y]=temp; 14 } 15 } 16 } 17 } 18 public static void main(String[] args) 19 { 20 int []arr={5,1,6,4,2,8,9}; 21 //排序前 22 printArray(arr); 23 //排序 24 selectSort(arr); 25 //排序后 26 printArray(arr); 27 } 28 public static void printArray(int[] arr) 29 { 30 System.out.print("["); 31 for(int x=0;x 32 { 33 if(x!=arr.length-1) 34 System.out.print(arr[x]+", "); 35 else 36 System.out.print(arr[x]); 37 } 38 System.out.println("]"); 39 } 40 }
8、冒泡排序
第一圈,最值出现在最后位
1 public static void bubbleSort(int[] arr) 2 { 3 for(int x=0;x 4 { 5 for(int y=0;y 6 { 7 if(arr[x]>arr[y]) 8 { 9 int temp=arr[y]; 10 arr[y]=arr[y+1]; 11 arr[y]=temp; 12 } 13 }
9、最快排序
希尔排序
PS:真实开发时Arrays.sort(arr);
10、数组中元素交换时,对数组的元素操作,而不是直接对元素操作
11、操作失败,通常返回-1
12、数组做查找时,存在多个key值时,获取key第一次出现在数组中的位置
13、折半查找
前提:数组有序
1 package array; 2 public class ArrayTest4 { 3 public static void main(String[] args) 4 { 5 int[] arr={2,4,5,7,19,32,45}; 6 int index=halfSearch(arr,32); 7 int index_2=halfSearch_2(arr,2); 8 System.out.println("index="+index); 9 System.out.println("index_2="+index_2); 10 } 11 public static int halfSearch(int[] arr,int key) 12 { 13 int min,max,mid; 14 min=0; 15 max=arr.length-1; 16 mid=(min+max)/2; 17 while(arr[mid]!=key) 18 { 19 if(key>arr[mid]) 20 min=mid+1; 21 else if(key 22 max=mid-1; 23 if(min>max)//如果查找的值大于最大值,则min无限+1,便大于max 24 return -1; 25 mid=(max+min)/2; 26 } 27 return mid; 28 } 29 public static int halfSearch_2(int[] arr,int key) 30 { 31 int min=0,max=arr.length-1,mid; 32 while(min<=max) 33 { 34 mid=(max+min)>>1; 35 if(key>arr[mid]) 36 min=mid+1; 37 else if(key 38 max=mid-1; 39 else 40 return mid; 41 } 42 return -1; 43 } 44 45 }
14、进制转换
(1)十进制-二进制
%2
/2
(2)十进制-十六进制
>>>4
1 package array; 2 public class ArrayTest7 { 3 public static void main(String[] args) 4 { 5 toBin(-6); 6 toBa(15); 7 toHex(60); 8 } 9 public static void toBin(int num) 10 { 11 //十进制转-二进制 12 trans(num,1,1); 13 } 14 15 public static void toBa(int num) 16 { 17 //十进制转-二进制 18 trans(num,7,3); 19 } 20 21 public static void toHex(int num) 22 { 23 //十进制转-十六进制 24 trans(num,15,4); 25 } 26 27 28 public static void trans(int num,int base,int offset) 29 { 30 if(num==0) 31 { 32 System.out.println(0); 33 return; 34 } 35 char[] chs={‘0‘,‘1‘,‘2‘,‘3‘,‘4‘, 36 ‘5‘,‘6‘,‘7‘,‘8‘,‘9‘, 37 ‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘}; 38 char[] arr=new char[32]; 39 int pos=arr.length; 40 while(num!=0) 41 { 42 int temp=num&base; 43 arr[--pos]=chs[temp]; 44 num=num>>>offset; 45 } 46 for(int x=pos;x 47 { 48 System.out.print(arr[x]); 49 } 50 System.out.println(""); 51 } 52 }
15、查表法
建立表格,内部存储0到F,表格有下标,可调整与进制内部对应
16、字符数组被定义时,空位都是\u0000
17、二维数组
(1)初始化
int [][]arr=new int[3][4];
s.o.p(arr);//[[[email protected]
s.o.p(arr[0]);//[[email protected]
----------------------------------
int[][]arr=new int[3][];
s.o.p(arr[0]);//null
(2)定义
一维数组:int[] x; int x[];
二维数组:int[][]y; int[][]y; int[]y[];