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

原创 2015年07月08日 21:43:17
-----------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[ ];


  


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

黑马程序员——Java基础语法(三)---数组

一、概念         同一种类型数据的集合。简单的来说就是一容器,用来装东西的。         使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。   ...

黑马程序员——java基础语法(三)---数组

对java中的数组进行了介绍

黑马程序员——Java基础——数组

数组 数组是同一种类型的数据的集合,其实数组就是一个容器。 Java中出现了数组,数组有些什么用处呢?可以自动给数组中的元素从0开始编号,方便操作这些元素 定义数组的两种格式: 格式1:元素类...

黑马程序员_Java基础(流程控制、函数、数组)

------- android培训、java培训、期待与您交流! ----------   ------------------程序流程控制   函数  数组 1、if语句(判断结构) 格式:...

黑马程序员——3,JAVA基础(函数,数组相关)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------                        3,JAVA基础(函数,数组相关)   //函数:...

黑马程序员Java笔记——数组

数组 关键词:元素、下标、数组排序、数组查找、一维数组、二维数组、多维数组 一、引述: 在执行程序的时候,需要存储大量的数据,Java提供一种叫做数组的数据结构,它可以用来存储一个元素个数固定且...

黑马程序员----Java语言基础2(语句、函数、数组)

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-程序流程控制 判断结构 、选择结构、循环结构判断结构 if语句 三种格式: 1、if(条件表达式)...

黑马程序员-(5)Java基础语法之数组

------- android培训、java培训、期待与您交流! ----------  数组的定义: 概念:同一种类型数据的集合,就是一个容器。 数组优点:可以自动从0开始...

黑马程序员----java学习笔记之数组知识点

1、java内存结构分为栈、堆、方法区、本地方法区、寄存器等!各结构功能如下:         Java内存结构:                 栈内存:用于存储局部变量,当数据使用完,所占空间会自...

黑马程序员—JAVA基础—数组

1、概念:存储同一种数据类型的多个元素的容器。 2、特点:每一个元素都有编号,从0开始,最大编号是长度-1。          编号的专业叫法:索引 3、定义格式: A:数据类型[] 数组名;(一般用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员---Java 数组(三)
举报原因:
原因补充:

(最多只允许输入30个字)