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

千万不要小看数组——其实你不会数组

数组是个小东西

    初学的时候,觉得数组很简单,就像是一个矩阵嘛,里面存的都是基本数据,或者字符串。只要掌握了遍历,能够使用数组的查找,排序,找最值,看上去很简单实用,管理数据嘛,存放数据嘛,但其实你不懂数组。

数组到底是什么

    简单地说,数组也是个类,数组最独特的地方就是他可以存储基本数据类型的数据。

  
数组可以这样:
     数组可以作为基本数据类型数据的存放容器。

    基本数据类型 [] 数组名称=new 基本类型[(长度)]

    int [] arr =new int[3 ];最简单也是最好理解的数组,依靠[]脚标遍历。作为一个对象它却完全没有什么方法,只有一个可怜属性,length。他们作为对象只跟Object有关系,毕竟是继承了Object的方法,getclass()可以查看到这个数组的字节码。

  
   int[] arr =new int[ 3];
   System .out.println( arrgetClass().getName()) ;//[I 
表示int型的一维数组,从结果中可以看到,数组的类名其实是个符号[,二维数组[[两个中括号,以此类推呗。
 
  数组也可以是这样
    数组可存放对象,当我们用=给数组赋值时,并不是把对象复制了放进数组里面,而是把引用复制了一份放在数组里面。
    类名[] 数组名称=new 类名[长度]
     int[] arr =new int[ 3];
     String[] string =new String[3 ]//这里实际上只有一个对象就是数组对象string
     Object[] obj ={ stringarr"abc"};//基本数据类型不是对象,但是基本数据类型数组是对象
     //数组可以用高级for循环
     for(Object objs :obj ){
     System.out .println (objs) ;
 
  这个也很好理解用存放对象的数组呗,Object类型的数组更是无所不包,好像什么都能放。其实不是,这是初学时很容易弄错的概念,当数组想要存放对象时,其实拿到的只是引用,即这个对象的哈西地址值,所以当你想直接打印的时候,打印出哈西值就一点也不奇怪了,解决的办法只有一个就是改写对象的toString方法,并且遍历for语句数组,没办法,数组的方法奇少,只能这样了。

 

ArraysArray的区别

      他们的区别当然只是少了个s这么简单,我们可以看到数组的方法奇少,根本不方便实用,当你正在使用数组的时候突然想来个整数按大小排序,怎么办?难道还要写个冒泡算法搞一下?当然不是,java早就想好了,数组的很多方法都写进了Arrays这个类里面,其实就是一个工具包,这里面的方法都是为数组服务的,天,白打工的家伙。里面有很多常用的方法,例如sort()专门为别人家的孩子排序,toString(),算是一个小技能吧,可以直接把数组内容打印出来,打印效果就跟集合一样的,中括号加里面的元素。Equals()用来比较两个数组是否相同,必须所有元素都要相同。当然所有这些方法都是静态的,以为着你都要传数组对象作为参数,方法调用者是这个数组工具。

       Array就有点鸡肋了,他其实是反射类的成员之一,专门解决数组的反射问题,比如获取数组的长度,某个脚标的元素等等,也可以用newInstance()方法构造数组。

 

数组与Collection

    对了,Arrays还有一个功能就是asList()就是把数组转成集合,方便操作里面的元素,当然不是那种转完数组就消失了,数组还在,他只是把引用给了一份集合,或者把基本数据类型复制给了集合,所以集合怎么变,数组还是那个数组。虽然现在越来越优先考虑使用集合等容器去存放对象,数组因为有严格的边界,对一些不希望添加元素的场合,数组还是有限选择的。数组的创建也更方便,在一些返回值为数组的场合,如果后面不再添加数据可以用数组,如果后面还有操作要添加元素的话,只能用集合了。

 

 

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

posted on 2014-05-14 18:03  耍王在1218  阅读(160)  评论(0编辑  收藏  举报