黑马程序员-----0526班----java基础总结 四

---------------------- android培训java培训、期待与您交流! ----------------------  



       这两天老有人感冒,阴晴冷暖还是得多注意身体,身体是革命的本钱,好的身体才能保证这个好的学习状态。另外还有个两个问题需要回答一下:

1.关于有些学员说在教室没有兴趣学习,想回家看视频来复习。

a)        原则上我不希望出现这种问题,这样太浪费时间了。如果真的自律性强的话,那直接将视频拷贝回家,又何必来上课呢?还不是因为回了家以后没有学习的动力,没有学习的氛围,一直毫无目的的啃着视频来看,这个多浪费时间啊?在教室来说,虽然环境不是很好,但是至少在你看到旁边的人在学习时你也不会再那儿再玩游戏。

b)       再有关于蒙圈的事,很多人都开始感觉到有些吃力,重要的是掌握今天所讲的主线,至于其他的做为了解就好了。还是那句话:写代码前一定要有思路,有目的的去写,不要写了半天还不知道实现什么功能,每一行是什么意思。那就悲催了。如果真的出现蒙圈现象,告诉我在那块儿懵了,这个问题的解决刻不容缓。希望引起大家伙儿的注意。

2.      关于二维数组打印输出的数据:

       int[][] arr = new int[3][];

       System.out.println(arr[2]);

       arr = new int[3][2];

       System.out.println(arr[2]);

       输出的结果:

           Null,[I@de6ced。

    问题一:为何输出null?

    内存图解:

      

问题二:输出为啥是[I@de6ced,这又是个神马浮云?

     先看内存结构图:


关于这个的话,我们只需要记住@前边的东西,因为后边是一个哈希值。[代表的是它的类型,代表的是一个数组类型的,I代表的是数组中存放的数据

 

 

哦了,下边复写一下所学的知识点吧:

1.       内存结构分布:

2.       内存中堆栈的特点:

3.       局部变量在内存中的位置

4.       基本数据类型和引用数据类型在内存中分布的区别?

5.       多维数组

好了,接下来开始简单介绍吧:

内存结构分布:

       主要分为五部分:寄存器,本地方法区,方法区,栈,堆。

       主要涉及到:方法区,栈,堆。

       分析:

              寄存器:一般是CPU处理数据的区域;

              本地方法区:系统加载底层资源的区域;

              方法区:一般加载类或者是常量的区域。

              栈:一般用来存储局部变量

              堆:一般用来存储创建的对象

内存中堆栈的特点:

       栈:用于存储局部变量,当数据使用完,所占空间会自动释放。

堆:数组和对象,通过new建立的实例都存放在堆内存中。

                     每一个实体都有内存地址值

                     实体中的变量都有默认初始化值

               实体不在被使用,会在不确定的时间内被垃圾回收器回收

 

       多维数组

数组中的每一个元素都是数组,这样的数组就是多维数组。

int[][] arr = { { 1,2, 3 }, { 4, 5 }, { 6, 7, 8, 9 } };

定义二维数组arr, 其中有三个元素都是数组, 第一个数组3个元素, 第二个2个元素, 第三个4个元素.

int[][] arr = new int[][] { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8, 9 } };

定义二维数组arr, 其中有三个元素都是数组, 第一个数组3个元素, 第二个2个元素, 第三个4个元素.

int[][] arr = new int[3][3];

定义二维数组arr, 其中有三个元素都是数组, 每个小数组都是3个元素.

int[][] arr = new int[3][];

定义二维数组arr, 其中有三个元素都是数组, 每个小数组元素个数不确定.

练习

6.         * 打印数组中所有内容成一行

        int[] arr= new int[];

                                     for(int i=0;i<arr.lengh;i++){

      System.out.print(arr[i]);

                                     }

7.         * 交换数组的两元素

        int[] arr= {12,34};

        int temp= arr[0];

         arr[0]=arr[1];

        arr[1]=temp;

8.         * 反转数组的元素

       int[] arr = {12,34,56,67,89,97,99};

       int[] temp = new int[arr.length];

       int j =0;

       //打印源数据

       printInfo(arr);

       System.out.println();

       for(int i=arr.length-1;i>=0;i--){

           temp[j]=arr[i];

           j++;         

       }

printInfo(temp);

    public static void printInfo(int[] temp) {

       System.out.print("[");

       for (int i= 0; i < temp.lengthi++) {

           if(i<temp.length-2){

              System.out.print(temp[i]+",");

           }else if(i==temp.length-1){

              System.out.print(temp[i]+"]");

           }

       }

}

9.               排序

冒泡排序:


选择排序

10.           查找(折半查找)



11. .数组相关的工具方法

                Arrays.toString()    将数组转为字符串形式

                System.arraycopy()       拷贝数组中的一部分到另一个数组中

 

 

import java.util.*;

/*

面试题:

给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,

那么个元素的存储的角标为如何获取。

{13,15,19,28,33,45,78,106};

*/

class ArrayDemo5

{

    public staticvoid main(String[] args)

    {

//

//     int[] arr ={4,1,8,7,3,8,2};

       int[] arr ={13,15,19,28,33,45,78,106};

     int index = halfSearch_2(arr,5);

       System.out.println("index="+index);

 

       int index1 =Arrays.binarySearch(arr,5);//如果存在返回的具体的角标位置,不存在返回的是  -插入点-1

       System.out.println("index1="+index1);

    }

    /*

    二分查找法。

   

    */

    public staticint halfSearch(int[] arr,int key)

    {

       intmax,min,mid;

       min = 0;

       max =arr.length-1;

       mid =(max+min)/2;

      

       while(arr[mid]!=key)

       {

           if(key>arr[mid])

              min =mid + 1;

           elseif(key<arr[mid])

              max =mid - 1;

 

           if(max<min)

              return-1;

 

           mid =(max+min)/2;

       }

       return mid;

 

    }

 

    public staticint halfSearch_2(int[] arr,int key)

    {

       intmax,min,mid;

       min = 0;

       max =arr.length-1;

 

       while(min<=max)

       {

           mid =(max+min)>>1;

 

           if(key>arr[mid])

              min =mid + 1;

           elseif(key<arr[mid])

              max =mid - 1;

           else

              returnmid;

       }

       return-min-1;

    }

 

 

    /*

    数组常见功能:查找。

    */

    public staticint getIndex(int[] arr,int key)

    {

       for(int x=0;x<arr.length; x++)

       {

           if(arr[x]==key)

              returnx;

       }

       return -1;

    }

}

---------------------- android培训java培训、期待与您交流! ----------------------  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值