关闭

黑马程序员---Java 数组(三)

208人阅读 评论(0) 收藏 举报
-----------android培训java培训、java学习型技术博客、期待与您交流!------------  

一、概念

        同一种类型数据的集合。简单的来说就是一容器,用来装东西的。

        使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。

       

         内存结构中的五个空间: 栈内存,堆内存,方法区,本地方法区,寄存器

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

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

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

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

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

                   

                各个区的处理方法不同

 

二、一维数组的格式


         数组是一种单独的数据类型! 属于 引用类型!


        格式1

                          int []  arr = new int [3];  

                          int arr[] = new int[3];

        格式2

                                     如: int []  arr = new int []{1,2,3,4,5};

         简写的静态初始化格式 int []  arr = {1,2,3,4,5};

        其中:new是用来在堆内存中产生一个容器实体。




三、数组操作常见问题

    (1)、数组脚标越界异常(ArrayIndexOutOfBoundsException)

              int[] arr = new int[5];

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

            访问到了数组中的不存在的脚标时发生。

    (2)、空指针异常(NullPointerException)

              int[] arr = null;

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

             arr引用没有指向实体,却在操作实体中的元素时。


         遍历数组

                    int[] arr=new int[3];

                    for(int x=0; x<3; x++)

                 {

                System.out.printIn(arr[x]);

                 }


            练习题:1) 给定一个数组,获取数组中的最大值,以及最小值

          

         

     练习题2)两种数组排序方法:选择排序和冒泡排序

     先看一下思路:

      

   

/**
 要求:分别使用选择排序和冒泡排序对一个数组进行排序并打印
*/
  
class  Sort  
{  
    public static void main(String[] args)   
    {  
        int[] arr1= {9,8,7,4,56,3,2,44};  
		int[] arr2= {9,8,7,4,56,3,2,44};  

		swap1(arr1[0],arr1[1]);
       
        //selectSort(arr1);  //调用排序方法  
		//bubbleSort(arr2);  //调用冒泡排序方法
         
         for(int x = 0;x < arr1.length;x++)
			  {
                 // System.out.print(arr1[x]+",");

              }
			       System.out.print("\n");

	     for(int x = 0;x < arr2.length;x++)
			  {
                  System.out.print(arr2[x]+",");

              }
    }  
      
   /* 
   选择排序 
   1、先用0角标上的元素依次与其他元素进行比较,将较小值元素存放到0角标。 
   2、然后再拿1角标上的元素依次进行比较,以此类推。 
   */  
    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])  
                {  
                    //arr[x]=arr[y];  
                    //arr[y]=temp;  
                    swap(arr,x,y);  
                }     
            }  
        }  
    }  


      /* 
    冒泡排序 
    1、先从头角标相邻两个元素之间进行比较,将较大值存放在后一个元素中,然后再与后一个元素的进行比较,直至最大值存放到最后一个元素中。 
    2、再重复1操作,每次计较次数减一,一圈比完后存放的较大元素不再参与比较。 
    */  
  
    public static void bubbleSort(int[] arr)  
    {  
		 System.out.print("swap1");

        for (int x=0;x<arr.length-1;x++)  
        {  
            for (int y=0;y<arr.length-1-x;y++)//-x:让没每一次比较的元素减少。-1:避免角标越界。  
            {  
                if(arr[y]>arr[y+1])  
                    //swap(arr,y,y+1);
				 
				swap1(arr[y],arr[y+1]);
				
            }  
        }  
    }  


  
  
    //互换方法  
    public static void swap(int[] arr,int x,int y)  
    {  
      int temp;
      temp=arr[x];
	  arr[x]=arr[y];
	  arr[y]=temp;

    }  
  
    public static void swap1(int x,int y)  
    {  
     // int temp;
     int temp=x;
	     x=y;
	     y=temp;

		 System.out.print("x="+x+";"+"y="+y);

    }  

}  


    注意:  选择排序:是从左往右,从小往大排

                 冒泡排序:是从右往左,小大往小排


    练习题:十进制转二进制 及十进制转十六进制

     

class hex
{
	public static void main(String[] args) 
	{
		//十进制转换为二进制
		int num=10;
		StringBuffer sbBin = new StringBuffer();
		StringBuffer sbHex = new StringBuffer();
		while(num>0)
		{
			sbBin.append(num%2);
			num=num/2;
		}
		System.out.println(sbBin.reverse());
		//System.out.printIn(sbBin.reverse());
	


               //十进制转换为十六进制
	
		num=60;dd
		for(int x=0;x<8;x++)
	    {
			int temp=num&15;
			if(temp>9)
				sbHex.append((char)(temp-10+'a'));
			else
				sbHex.append(temp);
			num=num>>>4;

		}
		System.out.println(sbHex.reverse());

	}

}

        练习题: 用查表法将十进制转换成十六进制和二进制!


四、数组中的数组(多维数组

        格式1 int[][] arr= new int[3][2];

        解释:以上格式表示定义了名称为arr的二维数组。有3个一维数组,每一个一维数组中有2个元素。一维数组的名称分别为arr[0],arr[1],arr[2]。给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78

        格式2 int[][] arr= new int[3][];


   

         注:此种格式中每一个一维数组都是默认初始化值nullint[][] arr= new int[3][] 中arr[0],arr[1],arr[2]的值都null

                  当int  arr[0]=new int[3] ; 时 arr[0]保存的是 int[3]的内存地址,如上图所示

   

         格式3int[ ][ ] arr = {{3,8,2},{2,7},{9,0,1,6}};//每一个一维数组中具体元素都初始化了。

            注:一种特殊定义写法:int[ ]x,y[ ]; x是一维数组,y是二维数组。

      

             一维数组的定义方式: int[ ]    x; int  x[ ];

             二维数组的定义方式: int[ ][ ]  y; int y[ ][ ];  int[ ] y[ ];


  


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2872次
    • 积分:172
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条