黑马程序员——java学习2(31-61)——基础2

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)
[I@de6ced
数组,整数类型,地址为,哈希值(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);//[[I@XXXXX
s.o.p(arr[0]);//[I@XXXX
----------------------------------
int[][]arr=new int[3][];
s.o.p(arr[0]);//null

(2)定义
一维数组:int[] x; int x[];
二维数组:int[][]y; int[][]y; int[]y[];
原文地址:https://www.cnblogs.com/sunxlfree1206/p/4657188.html