【第22期】观点:IT 行业加班,到底有没有价值?

说说数组

原创 2012年03月26日 07:36:31

A faithful friend is hard to find. 知音难觅

一般来讲,只有是编过程序人都知道,在程序设计中数组都是占据这一个很显眼的位置,你可能要跟我的掰扯下,俺写个“hello world”就分明没有用到数组嘛,可你再瞅瞅,在那个main函数中,不也是涉及到String[] args,这样一个字符串数组了吗,可能您一直是使用c语言的,理所当然的认为,数组就是就是一组数据嘛,可是在Java中,它可不是这样,Java中的数组是作为一个对象存在的,所以,在Java中,“一组数字”仅仅只是数组的一个小的方面,另一方面,作为对象存在,这样好处显而易见,可以携带更过的信息,来看代码

Java代码 复制代码
  1. public class ArrTest { 
  2.     public staticvoid main(String[] args){ 
  3.         //建立数组,大小为3 
  4.         int[] arr2 = newint[3]; 
  5.         //逐一给数组元素复制,注意length是数组的一个属性 
  6.         for(int i=0;i<arr2.length;i++){ 
  7.             arr2[i]=(i+1)*10
  8.         } 
  9.         //打印数组 
  10.         for(int i=0;i<arr2.length;i++){ 
  11.             System.out.println(arr2[i]); 
  12.         } 
  13.         //arr2和null对象比较数组内的内容 
  14.         System.out.println(arr2.equals(null)); 
  15.     } 

  代码的编译运行结果如图1-1所示
 

                                图1-1   ArrTest的编译运行结果

      在这个代码中,我使用比较标准的数组创建方法,使用new来开辟内存,然后逐一赋值,在代码中,打印数组是,我使用了arr2.length来获得数组的长度,为什么可以这样呢?是由于Java中数组是一个对象,而length是它的一个属性,你可能要问,自己没有定义这个属性,它是从哪里来的,很简单,是数组作为对象,默认添加进去的,代码中的比较语句,equals方法是对象的方法,这也是系统默认添加进去的,由于是比较的内容,null里面什么都没有,所以结果为false,接下来说说如何定义数组吧

    定义数组

定义数组主要有两种方法,第一中是建立和初始化一块完成,数组元素的个数代表了数组的大小,比如像int[] arr = {10,20,30};其实它的完整形式是int[] arr = new int[]{10,20,30};

                                     第二种方法是只建立数组,在建立的时候指定大小,比如像int[] arr = new int[3];建立之后再对数组元素进行赋值

已经假设您是学习过c语言的,所以,多位数组您应该是可以类推明白的,我看好你哦!

Java代码 复制代码
  1. 先说说,数组定义的风格,个人推荐时使用类似int[] arr =new int[3]; 
  2. 这样的形式,在c语言中定义数组是这样int arr[]...当然你也可以采用那样的方式,不过,由于Java中数组是对象,所以前一种更能体现这种特点,就第一种吧 
  3. 而外 
  4. 有关数组的索引值,俺再说两句,索引所代表的意思是只当下元素相对首元素的位置差,第一个元素差为0,依次类推等等……所以,也就有了数组的大小和数组的最后一个值的索引值相差1的这种情况出现 

  在定义和使用数组上,也没有太多的东西,基本上了解了如何建立数组,以及多维数组的概念,能区别开基本数据类型和对象之间的不同,基本上就差不多了,俺是这么认为的,但是,对于数组还有一些高级的用法,在这里重点来说一下

   额外,说一句,在编写程序的时候,尽量把数组的维数控制在二维上下,太大了,会使得你的代码的可读性变得很糟糕,这是个人建议,俺就啰嗦这么一句

     数组的高级用法

    首先来看看一维数组引用的定义:int【】 arr = null;这表示arr是一个可以引用至int一维数组对象的引用名称,在这句话中表示,目前这个引用对象指向了null,其实就是没有指向任何引用,只是,这是一种比较好的习惯,此外,您还得建立一个概念

Java代码 复制代码
  1. 关于=运算 
  2. 在java中,如果=元算的对象是基本数据类型时,是表示“赋值”的意思 
  3. 在作用于对象时,那可不是表示赋值的意思,那表示的是引用 
  4. 举个例子 
  5. int【】 arr = newint10】; 
  6. arr是一个可以指向int【】的引用变量,而newint10】则表示的是实际的建立数组,int【】 arr只是一个引用变量,它是一个变量,所以在内存中并不会分配存储区域,但当使用new的时候,就会在内存中开辟存储空间的,就是这样的,其实很简单,在这里,你看懂了吗? 

   关于引用,我们来看一个代码:

Java代码 复制代码
  1. public class ArrTest2{ 
  2.    public staticvoid main(String[] args){ 
  3.       int[] arr = {10,20,30,40}; 
  4.       int[] arr1 = arr; 
  5.       System.out.println("通过arr取出的数据"); 
  6.       for(int i=0;i<arr.length;i++){ 
  7.             System.out.println(arr[i]); 
  8.       } 
  9.       System.out.println("通过arr1取出的数据"); 
  10.       for(int i=0;i<arr1.length;i++){ 
  11.             System.out.println(arr1[i]); 
  12.       } 
  13.       System.out.println("在arr1中修改数组数据"); 
  14.       arr1[1]=100
  15.       System.out.println("通过arr取出的数据"); 
  16.       for(int i=0;i<arr.length;i++){ 
  17.             System.out.println(arr[i]); 
  18.       } 
  19.       System.out.println("通过arr1取出的数据"); 
  20.       for(int i=0;i<arr1.length;i++){ 
  21.             System.out.println(arr1[i]); 
  22.       } 
  23.    } 
  24.  

     图1-2是代码运行的结果

  
   

                                  图1-2 ArrTest2编译运行的结果

      代码比较简单,相信很容易读懂的,重点是在arr1【10】=100这个地方,从代码运行结果,可以看的出来,其实两个引用都是实际指向数据的存储空间的,当一个引用修改数据的时候,存储空间里面的数据也会被修改,此外,代码中也体现出来的=运算所体现的两个不同用法,

Java代码 复制代码
  1. int[] arr1 = arr;是引用 
  2. arr1[1]=100;是基本数据类型的赋值运算 

关于遍历数组中的元素

   遍历数组的方法比较多,我在这里主要是像说说javase5之后的增强型for循环,来看代码吧

Java代码 复制代码
  1. public class ArrayTest3{ 
  2.    public staticvoid main(String[] args){ 
  3.       int[] arr ={10,20,30}; 
  4.       //使用增强型for循环 
  5.        for(int i:arr){ 
  6.        System.out.println(i); 
  7.        }       
  8.    } 
  9.  

代码编译运行结果见图1-3

  
     

                               图1-3  ArrayTest3编译运行结果

    对于增强型for循环,就不再多说了,从上面的代码和运行结果,很容易明白增强型for循环能做什么----对数组的依次存取

     来看看基本的语法,举例说明

Java代码 复制代码
  1. int[] arr = {10,20,30};//定义数组 
  2. for(int element:arr){//elements是数组的基本数据类型的变量,arr是数组 
  3.               System.out.println(element);//逐一取出数组的值赋给element,输出 

关于Arrays类

    对于数组的进行操作,不得不说一说Arrays类,这个类提供了一些方法,可以简化我们对数组的操作,不再写代码了,列出几个常用的方法,相信很容易懂的,实在看不明白,自己动手搭个程序一跑就知道

      sort()方法,对指定的数组进行排序,使用的算法是快速排序法

      binarySearch()方法,对已经排好序的数组,进行二分搜索,找到返回索引,否则为负值

      fill()方法,给数组中所有的值都指定统一的值,

      俺想了想,几个方法还是比较重要的,还是写个代码,看看效果吧

Java代码 复制代码
  1. import java.util.Scanner; 
  2. import java.util.Arrays; 
  3. public class Test{ 
  4.    public staticvoid main(String[] args){ 
  5.        Scanner scan = new Scanner(System.in); 
  6.        int[] arr = {1,8,4,5,9,6}; 
  7.        //对数组元素进行排序 
  8.        Arrays.sort(arr); 
  9.        for(int i=0;i<arr.length;i++){ 
  10.            System.out.println(arr[i]); 
  11.        } 
  12.        //输入要查询的值 
  13.        System.out.println("请输入您所要查询的值"); 
  14.        int find = scan.nextInt(); 
  15.        //输出为正数表示存在,正数为当前元素所在的索引值;如果为负值,表示搜索值是不存在的 
  16.        System.out.println("查询结果:"); 
  17.        System.out.println(Arrays.binarySearch(arr,find)); 
  18.    } 

   程序运行结果,如图1-4所示,注释写的很清楚,就不在另作解释了

 
 

                             图1-4Test编译运行的结果

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

相关文章推荐

我也来说说---数组的最大连续子数组和

问题:给定一个数组,求最大连续子数组和,并输出开始和结束坐标。例如{-1,2,3,-2,5,-7,4,8,-2,1},最大连续子数组为{2,3,-2,5,-7,4,8},最大和为13,从下标1开始,到...

说说数组

A faithful friend is hard to find. 知音难觅   一般来讲,只有是编过程序人都知道,在程序设计中数组都是占据这一个很显眼的位置,你可能要跟我的掰扯下,俺写个“hello world”就分明没有用到数组嘛,可你再瞅瞅,在那个main函数...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

[转]类型,转换,数组,协变及其他

为了让叙述简化,先定义几个用到的术语: 函数:可以给出输出的那种抽象体,变量可以认为是无参数函数。对于成员函数或者更习惯的叫做方法的那种函数,我认为它就是隐含了对象参数的函数。 类型系统是现在OO语言的核心和基石。类型系统是保证正确性的基础,现在的编程语言大多强调静态安全性,其实就是...

指针、引用、数组和字符串,你真的全弄清楚了吗?

注:1.未特别指明时,本文所述内容均为C/C++(引用则为C++)的;2.未特别指明时,本文的描述、测试和实现,一般基于80x86构架和Win32平台下的VC++6.0的debug模式,但我也会在某些...
  • keakon
  • keakon
  • 2006-06-03 06:17
  • 2808

说说随机打乱数组的方法

把一个数组随机打乱这个需求来源可能就是“洗牌”,所以我们常常称之为洗牌问题。这个问题实现并不复杂,有不少方法可以完成。与其他算法不同,洗牌问题不仅追求速度,还要求“洗得足够开”。今天只想写篇短的,只分享两种比较有代码性的洗牌方法。至于这些方法能不能真正将数组随机打乱,我们下次再讲。
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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