黑马程序员---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学习路线大揭秘连载2-JavaWeb篇!

编程语言Java,已经21岁了。从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的。Java应用的广泛已...
  • itcast_cn
  • itcast_cn
  • 2016年10月18日 17:44
  • 1471

黑马程序员-java就业面试题大全(持续更新)

1、一个"java"源文件中是否可以包含多个类()?
  • zj3911507
  • zj3911507
  • 2014年06月20日 16:32
  • 1944

黑马程序员——Java基础测试题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 黑马程序员——Java基础测试题 第1题:以下代码哪个是正确的?为什么?   a. byte...
  • liu007004
  • liu007004
  • 2015年01月16日 12:49
  • 1431

黑马程序员——Java基础---练习题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Java基础---练习题 1.写出程序结果class Demo { public stat...
  • liu007004
  • liu007004
  • 2015年01月19日 16:35
  • 702

黑马程序员--Java基础

——- android培训、java培训、期待与您交流! ———-
  • u013377211
  • u013377211
  • 2015年07月16日 11:56
  • 678

黑马程序员——网络爬虫

------- android培训、java培训、期待与您交流! ----------
  • yonggandeyangguang
  • yonggandeyangguang
  • 2014年09月24日 12:14
  • 253

黑马程序员---java访问mysql数据库详解(原创)

package Test1; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager...
  • chaopioneer
  • chaopioneer
  • 2013年12月04日 09:41
  • 340

关于我在黑马程序员培训毕业后的亲身体验

首先申明:我本人已经于2016年5月份在广州传智播客java培训完毕业,和黑马程序员官网没有任何的利益往来,也没有人出钱给我帮他们做软文推广,这是我在黑马程序员的亲身体验,不存在虚构。...
  • wjycgl
  • wjycgl
  • 2017年04月20日 15:27
  • 2016

黑马程序员--Java基础面试题整理

------- android培训、java培训、期待与您交流! Java面试题整理(自己学习过程中整理的重点题目,为面试做准备) 编程基础 1.(面试题): ...
  • wwj101004
  • wwj101004
  • 2014年10月31日 23:09
  • 816

黑马程序员_Java基础_我的day01学习笔记

01. 常见的DOS命令讲解 A:d: 回车 盘符切换 B:dir(directory):列出当前目录下的文件以及文件夹 C:cd (change directory)改变指定目录(进入指定目录)...
  • qq_21796869
  • qq_21796869
  • 2016年07月05日 10:36
  • 206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员---Java 数组(三)
举报原因:
原因补充:

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