动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

不可轻视的java数组

06-19 18:40 235浏览
举报 T字号
  • 大字
  • 中字
  • 小字

何谓数组?所谓数组,是指有序的元素序列。在Java中,java数组也是Java对象。若将有限个类型相同的变量的集合命名,那么这个名称之为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合。

数组的特点:

1)创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。

2)数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。

3)数组的长度一旦确定,就不能修改。

4)数组是有序排列的,我们可以直接通过下标(或索引)的方式获取指定位置的元素,速度很快。

我们结合上面的数组的特点来了解数组是如何建立的。

. 数组变量的声明;

    声明数组:

    1) 一个存放同一类型数据的集合

       a. 即可以是基本类型,也可以是对象类型;

       b. 数组中的每个数据为元素;

    2) 数组是一个对象,成员是数组长度和数组中的元素;

    3) 声明了一个数组变量并不是创建了一个对象;

    4) 声明数组的方式:

       int[] IArray 或者 int IArray[]     基本数据类型数组,数组中存放的是基本数据类型。

       Teacher[] tArray 或者 Teacher tArray[]    类类型数组,数组中存放的是Teacher类创建的若干个的对象。

    注意:1) 声明数组变量的时侯,不能指定数组的长度,以下声明方式是非法的。

             int x[1];

             int[2] x;

. 初始化

   初始化:自变量创建后首次赋值的过程;

    1. 创建数组对象;

       数组对象和其他Java对象一样,也用new语句创建;

       int[] iArray = new int[2];

       new int[2]语句执行以下步骤:

       a. 在堆区中为数组分配内存空间,以上代码创建了一个包含2个元素的int数组

       b. 为数组中的每个元素赋予其数据类型的默认值。

下面是对应的默认值:

          byte/short/int/long      0

 

          float                            0.0f

          double                       0.0d

          String                        null

          char                          '\u0000'

          boolean                    false

       c. 返回数组对象的引用

            在用new语句创建数组对象时,需要指定数组长度。数组长度表示数组中包含的元素数目。数组长度可以用具体的数值表示,也可以用变量表示。

如:

       int[] x = new int[10];

       或

       int size=10;

       int[] x = new int[size];

       数组的长度可以为0,此时数组中一个元素也没有。例如:

       int[] x = new int[0];

       对于Java类的程序入口方法main(String args[]),如果运行时这个类没有输入参数,那么main()方法的参数args并不是null, 而是一个长度为0的数组。

例如:

public class Sample {

           public static void main(String[] args) {

                System.out.println(args.length);           //打印0

           }

       }

       数组对象创建后,它的长度是固定的。数组对象的长度是无法改变的,但是数组变量可以改变所引用的数组对象。

       int[] x = new int[3];

       int[] y = x;

       x = new int[4];

对于以上程序段我们可以进行验证,如下面所示代码:

   package com.wusu.test01;                                                    

   public class TestArray

   {

           public static void main(String[] args)

           {

             int []x=new int [3];

             System.out.println(x.length);

             int []y=x;

             System.out.println(y.length);

            x=new int [4];

            System.out.println(x.length);

          }

 }

编译不会出错,并且运行结果如下(输出的分别是代码中的3个数组的长度):

    2. 初始化数组对象;      

       数组中的每个元素都有一个索引,或者称为下标。数组中的第一个元素的索引为0,第二个元素的索引为1, 依次类推。

       通过索引可以访问数组中的元素或者给数组中元素内容赋值。

       1) 声明、创建、初始化分开:

      //声明

          int[] iArray;

     //创建

          iArray = new int[2];

      //初始化

          iArray[0] = 0;

          iArray[1] = 1;

      2) 声明、创建的同时并初始化数组;

          int[] iArray = {0, 1};

          int[] iArray = new int[]{0, 1};

          Student sArray[] = new Student[] { new Student(“George”, “Male”, 20), new Student()};

          Student[] stArray = { new Student(), new Student()} ;

          注意:a.下面这些都是非法的数组初始化方式:

                   int[] x = new int[5]{5,4,3,2,1};           //编译出错,创建数组对象的同时并初始化的时候就不能指定数组长度了;

                   

                   int[] x;

                   x = {5,4,3,2,1};                           //{5,4,3,2,1}必须在声明数组变量的语句中使用,不能单独使用

    3. 多维数组;

       Java支持多维数组。假定某个宾馆有三层楼,第一层有4个房间,第二层有3个房间,第三层有5个房间。某一天客户人住宿情况如下所示:

       第三层:             |    |Tom |Jerry|    |Rose|

       第二层:          |Mary|    |Kevin|

       第一层:          |Mike|Jane|Duke |    |

       可以用两维数组来存储各个房间的客人信息。

String[][] room = new String[3][];

       room[0] = new Stirng[]{"Mike","Jane","Duke",null};

       room[1] = new String[]{"Mary",null,"kevin"};

       room[2] = new String[]{null,"Tom","Jerry",null,"Rose"}

  以上代码等价于:      

String[][] room = {

                            {"Mike","Jane","Duke",null},

                            {"Mary",null,"kevin"},

                            {null,"Tom","Jerry",null,"Rose"}

             };

       多维数组本质上是数组的数组,数组的元素内容还是数组;

    4. 数组的边界:      

       1) 一个数组的下标从0开始,数组通过数组的对象引用变量的下标访问数组。

          数组中第一个元素的索引为0, 第二元素的索引为1,依次类推。如果一个数组长度是5,要访问最后一个数组元素可以通过下标4来访问,如果通过下标5访问,超出了数组的边界,在运行时会抛出ArrayIndexOutOfBoundsException。

       2) 通过调用数组的length方法可以获得一个数组的元素个数(数组长度)。

          所有Java数组都有一个length属性,表示数组的长度. 该属性只能读取,但是不能修改。

          以下修改数组的length属性,这是非法的。

          int[] x = new int[4];

          x.length = 10;            //编译出错,length属性不能被修改。

       注:a. 数组变量必须在指向一个数组对象之后,才能访问其元素。

  public class Sample {

                   private int[] x;

                   public static void main(String[] args) {

                          Sample s = new Sample();

                          System.out.println(s.x);            //打印null

                          System.out.println(s.x[0]);         //运行时抛出NullPointerException

                          System.out.println(s.x.length);      //运行时抛出NullPointerException

                   }

              }

           b. 当数组的元素为引用类型时,数组中存放的是对象的引用,而不是对象本身;

     5. 数组的拷贝:      

 数组的长度一旦确定之后便不能调整,我们可以通过复制数组的内容变通实现改变数组长度。在System类中提供一个辅助的  arraycopy方法提供复制数组内容的功能:

      public static void arraycopy(Object src,

                             int srcPos,

                             Object dest,

                             int destPos,

                             int length)

    参数1,需要被复制的目标数组

    参数2,从这个数组的哪一个位置开始复制

    参数3,需要把数据复制到的另外的那一个新的数组对象

    参数4,复制到新数组里面哪个位置(从这个位置开始算)

    参数5,复制的目标数组的长度

        如下所示代码,ArrayCopy.java,我们先定义数组a1,a2,给a1赋初值{1,2,3,4,5,6,7,8,9,10},而a2只定义不赋值

package com.wusu.test01;

public class ArrayCopy

{ //显示数组函数

  public static void show(int[] a)

{

  for(int i=0;i

  {

     System.out.print(a[i]+"  ");

  }

  System.out.println();

}

//主函数

public static void main(String[] args)

{

  int [] a1={1,2,3,4,5,6,7,8,9,10};

  int [] a2=new int[10];

  System.out.println("a1.length:"+a1.length+"  a2.length:"+a2.length);

  show(a1);//复制前显示

  show(a2);//复制前显示

 System.arraycopy(a1,3,a2,1,6);//复制

  System.out.println("a1.length:"+a1.length+"  a2.length:"+a2.length);

  show(a1);//复制后显示

  show(a2);//复制后显示

}

}

运行程序之后,将a1数组中的数字复制到a2数组中,复制总长度为6。

看似简单的数组,我们讲起来其实也只是讲到很少的一部分,还有很多知识点和案例是我们所没有讲到或者忽略的。所以,在我们面对java中的数组的时候千万不可以掉以轻心,要严阵以待呀。

0人推荐
共同学习,写下你的评论
0条评论
披萨
程序员披萨

3篇文章贡献18142字

作者相关文章更多>

推荐相关文章更多>

Java数据结构

HelloWorld10-31 08:24

浅谈MySQL中SQL优化的常用方法

军哥08-12 23:29

五分钟读懂UML类图

江湖人称小李白12-10 10:41

MyBatis开发框架的四大核心

IT逐梦者08-17 21:43

一次搞定continue,break和return

HelloWorld11-06 11:19

发评论

举报

0/150

取消